<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<!-- SECTION: Programming -->
<head>
	<title>HTTP and IPP APIs</title>
	<meta name='keywords' content='Programming'>
	<meta name='creator' content='Mini-XML v2.3'>
	<style type='text/css'><!--
	h1, h2, h3, p { font-family: sans-serif; text-align: justify; }
	tt, pre a:link, pre a:visited, tt a:link, tt a:visited { font-weight: bold; color: #7f0000; }
	pre { font-weight: bold; color: #7f0000; margin-left: 2em; }
	span.info { background: #000000; border: solid thin #000000; color: #ffffff; font-size: 80%; font-style: italic; font-weight: bold; white-space: nowrap; }
	h3 span.info { float: right; font-size: 100%; }
	h1.title, h2.title, h3.title { border-bottom: solid 2px #000000; }
	--></style>
</head>
<body>
<!--
  "$Id: api-httpipp.shtml 6649 2007-07-11 21:46:42Z mike $"

  HTTP and IPP API introduction for the Common UNIX Printing System (CUPS).

  Copyright 2007 by Apple Inc.
  Copyright 1997-2006 by Easy Software Products, all rights reserved.

  These coded instructions, statements, and computer programs are the
  property of Apple Inc. and are protected by Federal copyright
  law.  Distribution and use rights are outlined in the file "LICENSE.txt"
  which should have been included with this file.  If this file is
  file is missing or damaged, see the license at "http://www.cups.org/".
-->

<h2 class='title'>Introduction</h2>

<p>The CUPS HTTP and IPP APIs provide low-level access to the
HTTP and IPP protocols and CUPS scheduler. They are typically
used by monitoring and administration programs to perform
specific functions not supported by the high-level CUPS API
functions.</p>

<h2 class='title'>General Usage</h2>

<p>The <var>&lt;cups/cups.h&gt;</var> header file must be included to
use the HTTP and IPP functions.</p>

<p>Programs using these functions must be linked to the CUPS
library: <var>libcups.a</var>, <var>libcups.so.2</var>,
<var>libcups.2.dylib</var>, <var>libcups_s.a</var>, or
<var>libcups2.lib</var> depending on the platform. The following
command compiles <var>myprogram.c</var> using GCC and the CUPS
library:</p>

<pre class='command'>
<kbd>gcc -o myprogram myprogram.c -lcups</kbd>
</pre>

<h2 class='title'>Compatibility</h2>

<p>Unless otherwise specified, the HTTP and IPP API functions
require CUPS 1.1 or higher.</p>
<h2 class='title'>Contents</h2>
<ul>
	<li><a href='#ENUMERATIONS'>Enumerations</a></li>
	<li><a href='#FUNCTIONS'>Functions</a></li>
	<li><a href='#STRUCTURES'>Structures</a></li>
	<li><a href='#TYPES'>Types</a></li>
	<li><a href='#UNIONS'>Unions</a></li>
</ul>
<!-- NEW PAGE -->
<h2 class='title'><a name='ENUMERATIONS'>Enumerations</a></h2>
<ul>
	<li><a href='#http_auth_e'><tt>http_auth_e</tt></a> </li>
	<li><a href='#http_encoding_e'><tt>http_encoding_e</tt></a> </li>
	<li><a href='#http_encryption_e'><tt>http_encryption_e</tt></a> </li>
	<li><a href='#http_field_e'><tt>http_field_e</tt></a> </li>
	<li><a href='#http_keepalive_e'><tt>http_keepalive_e</tt></a> </li>
	<li><a href='#http_state_e'><tt>http_state_e</tt></a> </li>
	<li><a href='#http_status_e'><tt>http_status_e</tt></a> </li>
	<li><a href='#http_uri_coding_e'><tt>http_uri_coding_e</tt></a> </li>
	<li><a href='#http_uri_status_e'><tt>http_uri_status_e</tt></a> </li>
	<li><a href='#http_version_e'><tt>http_version_e</tt></a> </li>
	<li><a href='#ipp_finish_e'><tt>ipp_finish_e</tt></a> </li>
	<li><a href='#ipp_jstate_e'><tt>ipp_jstate_e</tt></a> </li>
	<li><a href='#ipp_op_e'><tt>ipp_op_e</tt></a> </li>
	<li><a href='#ipp_orient_e'><tt>ipp_orient_e</tt></a> </li>
	<li><a href='#ipp_pstate_e'><tt>ipp_pstate_e</tt></a> </li>
	<li><a href='#ipp_quality_e'><tt>ipp_quality_e</tt></a> </li>
	<li><a href='#ipp_res_e'><tt>ipp_res_e</tt></a> </li>
	<li><a href='#ipp_state_e'><tt>ipp_state_e</tt></a> </li>
	<li><a href='#ipp_status_e'><tt>ipp_status_e</tt></a> </li>
	<li><a href='#ipp_tag_e'><tt>ipp_tag_e</tt></a> </li>
</ul>
<!-- NEW PAGE -->
<h3 class='title'><a name='http_auth_e'>http_auth_e</a></h3>
<h4>Description</h4>
<p>HTTP authentication types
<h4>Values</h4>
<div class='table'><table align='center' border='1' width='80%' summary='Values'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>HTTP_AUTH_BASIC</tt> </td><td>Basic authentication in use
</td></tr>
<tr><td><tt>HTTP_AUTH_MD5</tt> </td><td>Digest authentication in use
</td></tr>
<tr><td><tt>HTTP_AUTH_MD5_INT</tt> </td><td>Digest authentication in use for body
</td></tr>
<tr><td><tt>HTTP_AUTH_MD5_SESS</tt> </td><td>MD5-session authentication in use
</td></tr>
<tr><td><tt>HTTP_AUTH_MD5_SESS_INT</tt> </td><td>MD5-session authentication in use for body
</td></tr>
<tr><td><tt>HTTP_AUTH_NEGOTIATE</tt> <span class='info'>&nbsp;CUPS 1.3&nbsp;</span></td><td>GSSAPI authentication in use 
</td></tr>
<tr><td><tt>HTTP_AUTH_NONE</tt> </td><td>No authentication in use
</td></tr>
</tbody></table></div>
<!-- NEW PAGE -->
<h3 class='title'><a name='http_encoding_e'>http_encoding_e</a></h3>
<h4>Description</h4>
<p>HTTP transfer encoding values
<h4>Values</h4>
<div class='table'><table align='center' border='1' width='80%' summary='Values'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>HTTP_ENCODE_CHUNKED</tt> </td><td>Data is chunked
</td></tr>
<tr><td><tt>HTTP_ENCODE_FIELDS</tt> </td><td>Sending HTTP fields
</td></tr>
<tr><td><tt>HTTP_ENCODE_LENGTH</tt> </td><td>Data is sent with Content-Length
</td></tr>
</tbody></table></div>
<!-- NEW PAGE -->
<h3 class='title'><a name='http_encryption_e'>http_encryption_e</a></h3>
<h4>Description</h4>
<p>HTTP encryption values
<h4>Values</h4>
<div class='table'><table align='center' border='1' width='80%' summary='Values'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>HTTP_ENCRYPT_ALWAYS</tt> </td><td>Always encrypt (SSL)
</td></tr>
<tr><td><tt>HTTP_ENCRYPT_IF_REQUESTED</tt> </td><td>Encrypt if requested (TLS upgrade)
</td></tr>
<tr><td><tt>HTTP_ENCRYPT_NEVER</tt> </td><td>Never encrypt
</td></tr>
<tr><td><tt>HTTP_ENCRYPT_REQUIRED</tt> </td><td>Encryption is required (TLS upgrade)
</td></tr>
</tbody></table></div>
<!-- NEW PAGE -->
<h3 class='title'><a name='http_field_e'>http_field_e</a></h3>
<h4>Description</h4>
<p>HTTP field names
<h4>Values</h4>
<div class='table'><table align='center' border='1' width='80%' summary='Values'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>HTTP_FIELD_ACCEPT_LANGUAGE</tt> </td><td>Accept-Language field
</td></tr>
<tr><td><tt>HTTP_FIELD_ACCEPT_RANGES</tt> </td><td>Accept-Ranges field
</td></tr>
<tr><td><tt>HTTP_FIELD_AUTHORIZATION</tt> </td><td>Authorization field
</td></tr>
<tr><td><tt>HTTP_FIELD_CONNECTION</tt> </td><td>Connection field
</td></tr>
<tr><td><tt>HTTP_FIELD_CONTENT_ENCODING</tt> </td><td>Content-Encoding field
</td></tr>
<tr><td><tt>HTTP_FIELD_CONTENT_LANGUAGE</tt> </td><td>Content-Language field
</td></tr>
<tr><td><tt>HTTP_FIELD_CONTENT_LENGTH</tt> </td><td>Content-Length field
</td></tr>
<tr><td><tt>HTTP_FIELD_CONTENT_LOCATION</tt> </td><td>Content-Location field
</td></tr>
<tr><td><tt>HTTP_FIELD_CONTENT_MD5</tt> </td><td>Content-MD5 field
</td></tr>
<tr><td><tt>HTTP_FIELD_CONTENT_RANGE</tt> </td><td>Content-Range field
</td></tr>
<tr><td><tt>HTTP_FIELD_CONTENT_TYPE</tt> </td><td>Content-Type field
</td></tr>
<tr><td><tt>HTTP_FIELD_CONTENT_VERSION</tt> </td><td>Content-Version field
</td></tr>
<tr><td><tt>HTTP_FIELD_DATE</tt> </td><td>Date field
</td></tr>
<tr><td><tt>HTTP_FIELD_HOST</tt> </td><td>Host field
</td></tr>
<tr><td><tt>HTTP_FIELD_IF_MODIFIED_SINCE</tt> </td><td>If-Modified-Since field
</td></tr>
<tr><td><tt>HTTP_FIELD_IF_UNMODIFIED_SINCE</tt> </td><td>If-Unmodified-Since field
</td></tr>
<tr><td><tt>HTTP_FIELD_KEEP_ALIVE</tt> </td><td>Keep-Alive field
</td></tr>
<tr><td><tt>HTTP_FIELD_LAST_MODIFIED</tt> </td><td>Last-Modified field
</td></tr>
<tr><td><tt>HTTP_FIELD_LINK</tt> </td><td>Link field
</td></tr>
<tr><td><tt>HTTP_FIELD_LOCATION</tt> </td><td>Location field
</td></tr>
<tr><td><tt>HTTP_FIELD_MAX</tt> </td><td>Maximum field index
</td></tr>
<tr><td><tt>HTTP_FIELD_RANGE</tt> </td><td>Range field
</td></tr>
<tr><td><tt>HTTP_FIELD_REFERER</tt> </td><td>Referer field
</td></tr>
<tr><td><tt>HTTP_FIELD_RETRY_AFTER</tt> </td><td>Retry-After field
</td></tr>
<tr><td><tt>HTTP_FIELD_TRANSFER_ENCODING</tt> </td><td>Transfer-Encoding field
</td></tr>
<tr><td><tt>HTTP_FIELD_UNKNOWN</tt> </td><td>Unknown field
</td></tr>
<tr><td><tt>HTTP_FIELD_UPGRADE</tt> </td><td>Upgrade field
</td></tr>
<tr><td><tt>HTTP_FIELD_USER_AGENT</tt> </td><td>User-Agent field
</td></tr>
<tr><td><tt>HTTP_FIELD_WWW_AUTHENTICATE</tt> </td><td>WWW-Authenticate field
</td></tr>
</tbody></table></div>
<!-- NEW PAGE -->
<h3 class='title'><a name='http_keepalive_e'>http_keepalive_e</a></h3>
<h4>Description</h4>
<p>Types and structures...
<h4>Values</h4>
<div class='table'><table align='center' border='1' width='80%' summary='Values'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>HTTP_KEEPALIVE_OFF</tt> </td><td>No keep alive support
</td></tr>
<tr><td><tt>HTTP_KEEPALIVE_ON</tt> </td><td>Use keep alive
</td></tr>
</tbody></table></div>
<!-- NEW PAGE -->
<h3 class='title'><a name='http_state_e'>http_state_e</a></h3>
<h4>Description</h4>
<p>
<h4>Values</h4>
<div class='table'><table align='center' border='1' width='80%' summary='Values'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>HTTP_CLOSE</tt> </td><td>CLOSE command, waiting for blank line
</td></tr>
<tr><td><tt>HTTP_DELETE</tt> </td><td>DELETE command, waiting for blank line
</td></tr>
<tr><td><tt>HTTP_GET</tt> </td><td>GET command, waiting for blank line
</td></tr>
<tr><td><tt>HTTP_GET_SEND</tt> </td><td>GET command, sending data
</td></tr>
<tr><td><tt>HTTP_HEAD</tt> </td><td>HEAD command, waiting for blank line
</td></tr>
<tr><td><tt>HTTP_OPTIONS</tt> </td><td>OPTIONS command, waiting for blank line
</td></tr>
<tr><td><tt>HTTP_POST</tt> </td><td>POST command, waiting for blank line
</td></tr>
<tr><td><tt>HTTP_POST_RECV</tt> </td><td>POST command, receiving data
</td></tr>
<tr><td><tt>HTTP_POST_SEND</tt> </td><td>POST command, sending data
</td></tr>
<tr><td><tt>HTTP_PUT</tt> </td><td>PUT command, waiting for blank line
</td></tr>
<tr><td><tt>HTTP_PUT_RECV</tt> </td><td>PUT command, receiving data
</td></tr>
<tr><td><tt>HTTP_STATUS</tt> </td><td>Command complete, sending status
</td></tr>
<tr><td><tt>HTTP_TRACE</tt> </td><td>TRACE command, waiting for blank line
</td></tr>
<tr><td><tt>HTTP_WAITING</tt> </td><td>Waiting for command
</td></tr>
</tbody></table></div>
<!-- NEW PAGE -->
<h3 class='title'><a name='http_status_e'>http_status_e</a></h3>
<h4>Description</h4>
<p>HTTP status codes
<h4>Values</h4>
<div class='table'><table align='center' border='1' width='80%' summary='Values'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>HTTP_ACCEPTED</tt> </td><td>DELETE command was successful
</td></tr>
<tr><td><tt>HTTP_BAD_GATEWAY</tt> </td><td>Bad gateway
</td></tr>
<tr><td><tt>HTTP_BAD_REQUEST</tt> </td><td>Bad request
</td></tr>
<tr><td><tt>HTTP_CONFLICT</tt> </td><td>Request is self-conflicting
</td></tr>
<tr><td><tt>HTTP_CONTINUE</tt> </td><td>Everything OK, keep going...
</td></tr>
<tr><td><tt>HTTP_CREATED</tt> </td><td>PUT command was successful
</td></tr>
<tr><td><tt>HTTP_ERROR</tt> </td><td>An error response from httpXxxx()
</td></tr>
<tr><td><tt>HTTP_EXPECTATION_FAILED</tt> </td><td>The expectation given in an Expect header field was not met
</td></tr>
<tr><td><tt>HTTP_FORBIDDEN</tt> </td><td>Forbidden to access this URI
</td></tr>
<tr><td><tt>HTTP_GATEWAY_TIMEOUT</tt> </td><td>Gateway connection timed out
</td></tr>
<tr><td><tt>HTTP_GONE</tt> </td><td>Server has gone away
</td></tr>
<tr><td><tt>HTTP_LENGTH_REQUIRED</tt> </td><td>A content length or encoding is required
</td></tr>
<tr><td><tt>HTTP_METHOD_NOT_ALLOWED</tt> </td><td>Method is not allowed
</td></tr>
<tr><td><tt>HTTP_MOVED_PERMANENTLY</tt> </td><td>Document has moved permanently
</td></tr>
<tr><td><tt>HTTP_MOVED_TEMPORARILY</tt> </td><td>Document has moved temporarily
</td></tr>
<tr><td><tt>HTTP_MULTIPLE_CHOICES</tt> </td><td>Multiple files match request
</td></tr>
<tr><td><tt>HTTP_NOT_ACCEPTABLE</tt> </td><td>Not Acceptable
</td></tr>
<tr><td><tt>HTTP_NOT_AUTHORITATIVE</tt> </td><td>Information isn't authoritative
</td></tr>
<tr><td><tt>HTTP_NOT_FOUND</tt> </td><td>URI was not found
</td></tr>
<tr><td><tt>HTTP_NOT_IMPLEMENTED</tt> </td><td>Feature not implemented
</td></tr>
<tr><td><tt>HTTP_NOT_MODIFIED</tt> </td><td>File not modified
</td></tr>
<tr><td><tt>HTTP_NOT_SUPPORTED</tt> </td><td>HTTP version not supported
</td></tr>
<tr><td><tt>HTTP_NO_CONTENT</tt> </td><td>Successful command, no new data
</td></tr>
<tr><td><tt>HTTP_OK</tt> </td><td>OPTIONS/GET/HEAD/POST/TRACE command was successful
</td></tr>
<tr><td><tt>HTTP_PARTIAL_CONTENT</tt> </td><td>Only a partial file was recieved/sent
</td></tr>
<tr><td><tt>HTTP_PAYMENT_REQUIRED</tt> </td><td>Payment required
</td></tr>
<tr><td><tt>HTTP_PRECONDITION</tt> </td><td>Precondition failed
</td></tr>
<tr><td><tt>HTTP_PROXY_AUTHENTICATION</tt> </td><td>Proxy Authentication is Required
</td></tr>
<tr><td><tt>HTTP_REQUESTED_RANGE</tt> </td><td>The requested range is not satisfiable
</td></tr>
<tr><td><tt>HTTP_REQUEST_TIMEOUT</tt> </td><td>Request timed out
</td></tr>
<tr><td><tt>HTTP_REQUEST_TOO_LARGE</tt> </td><td>Request entity too large
</td></tr>
<tr><td><tt>HTTP_RESET_CONTENT</tt> </td><td>Content was reset/recreated
</td></tr>
<tr><td><tt>HTTP_SEE_OTHER</tt> </td><td>See this other link...
</td></tr>
<tr><td><tt>HTTP_SERVER_ERROR</tt> </td><td>Internal server error
</td></tr>
<tr><td><tt>HTTP_SERVICE_UNAVAILABLE</tt> </td><td>Service is unavailable
</td></tr>
<tr><td><tt>HTTP_SWITCHING_PROTOCOLS</tt> </td><td>HTTP upgrade to TLS/SSL
</td></tr>
<tr><td><tt>HTTP_UNAUTHORIZED</tt> </td><td>Unauthorized to access host
</td></tr>
<tr><td><tt>HTTP_UNSUPPORTED_MEDIATYPE</tt> </td><td>The requested media type is unsupported
</td></tr>
<tr><td><tt>HTTP_UPGRADE_REQUIRED</tt> </td><td>Upgrade to SSL/TLS required
</td></tr>
<tr><td><tt>HTTP_URI_TOO_LONG</tt> </td><td>URI too long
</td></tr>
<tr><td><tt>HTTP_USE_PROXY</tt> </td><td>Must use a proxy to access this URI
</td></tr>
</tbody></table></div>
<!-- NEW PAGE -->
<h3 class='title'><a name='http_uri_coding_e'>http_uri_coding_e</a></h3>
<h4>Description</h4>
<p>
<h4>Values</h4>
<div class='table'><table align='center' border='1' width='80%' summary='Values'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>HTTP_URI_CODING_ALL</tt> </td><td>En/decode everything
</td></tr>
<tr><td><tt>HTTP_URI_CODING_HOSTNAME</tt> </td><td>En/decode the hostname portion
</td></tr>
<tr><td><tt>HTTP_URI_CODING_MOST</tt> </td><td>En/decode all but the query
</td></tr>
<tr><td><tt>HTTP_URI_CODING_NONE</tt> </td><td>Don't en/decode anything
</td></tr>
<tr><td><tt>HTTP_URI_CODING_QUERY</tt> </td><td>En/decode the query portion
</td></tr>
<tr><td><tt>HTTP_URI_CODING_RESOURCE</tt> </td><td>En/decode the resource portion
</td></tr>
<tr><td><tt>HTTP_URI_CODING_USERNAME</tt> </td><td>En/decode the username portion
</td></tr>
</tbody></table></div>
<!-- NEW PAGE -->
<h3 class='title'><a name='http_uri_status_e'>http_uri_status_e</a></h3>
<h4>Description</h4>
<p>
<h4>Values</h4>
<div class='table'><table align='center' border='1' width='80%' summary='Values'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>HTTP_URI_BAD_ARGUMENTS</tt> </td><td>Bad arguments to function (error)
</td></tr>
<tr><td><tt>HTTP_URI_BAD_HOSTNAME</tt> </td><td>Bad hostname in URI (error)
</td></tr>
<tr><td><tt>HTTP_URI_BAD_PORT</tt> </td><td>Bad port number in URI (error)
</td></tr>
<tr><td><tt>HTTP_URI_BAD_RESOURCE</tt> </td><td>Bad resource in URI (error)
</td></tr>
<tr><td><tt>HTTP_URI_BAD_SCHEME</tt> </td><td>Bad scheme in URI (error)
</td></tr>
<tr><td><tt>HTTP_URI_BAD_URI</tt> </td><td>Bad/empty URI (error)
</td></tr>
<tr><td><tt>HTTP_URI_BAD_USERNAME</tt> </td><td>Bad username in URI (error)
</td></tr>
<tr><td><tt>HTTP_URI_MISSING_RESOURCE</tt> </td><td>Missing resource in URI (warning)
</td></tr>
<tr><td><tt>HTTP_URI_MISSING_SCHEME</tt> </td><td>Missing scheme in URI (warning)
</td></tr>
<tr><td><tt>HTTP_URI_OK</tt> </td><td>URI decoded OK
</td></tr>
<tr><td><tt>HTTP_URI_OVERFLOW</tt> </td><td>URI buffer for httpAssembleURI is too small
</td></tr>
<tr><td><tt>HTTP_URI_UNKNOWN_SCHEME</tt> </td><td>Unknown scheme in URI (warning)
</td></tr>
</tbody></table></div>
<!-- NEW PAGE -->
<h3 class='title'><a name='http_version_e'>http_version_e</a></h3>
<h4>Description</h4>
<p>
<h4>Values</h4>
<div class='table'><table align='center' border='1' width='80%' summary='Values'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>HTTP_0_9</tt> </td><td>HTTP/0.9
</td></tr>
<tr><td><tt>HTTP_1_0</tt> </td><td>HTTP/1.0
</td></tr>
<tr><td><tt>HTTP_1_1</tt> </td><td>HTTP/1.1
</td></tr>
</tbody></table></div>
<!-- NEW PAGE -->
<h3 class='title'><a name='ipp_finish_e'>ipp_finish_e</a></h3>
<h4>Description</h4>
<p>
<h4>Values</h4>
<div class='table'><table align='center' border='1' width='80%' summary='Values'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>IPP_FINISHINGS_BALE</tt> </td><td>Bale (any type)
</td></tr>
<tr><td><tt>IPP_FINISHINGS_BIND</tt> </td><td>Bind
</td></tr>
<tr><td><tt>IPP_FINISHINGS_BIND_BOTTOM</tt> </td><td>Bind on bottom
</td></tr>
<tr><td><tt>IPP_FINISHINGS_BIND_LEFT</tt> </td><td>Bind on left
</td></tr>
<tr><td><tt>IPP_FINISHINGS_BIND_RIGHT</tt> </td><td>Bind on right
</td></tr>
<tr><td><tt>IPP_FINISHINGS_BIND_TOP</tt> </td><td>Bind on top
</td></tr>
<tr><td><tt>IPP_FINISHINGS_BOOKLET_MAKER</tt> </td><td>Fold to make booklet
</td></tr>
<tr><td><tt>IPP_FINISHINGS_COVER</tt> </td><td>Add cover
</td></tr>
<tr><td><tt>IPP_FINISHINGS_EDGE_STITCH</tt> </td><td>Stitch along any side
</td></tr>
<tr><td><tt>IPP_FINISHINGS_EDGE_STITCH_BOTTOM</tt> </td><td>Stitch along bottom edge
</td></tr>
<tr><td><tt>IPP_FINISHINGS_EDGE_STITCH_LEFT</tt> </td><td>Stitch along left side
</td></tr>
<tr><td><tt>IPP_FINISHINGS_EDGE_STITCH_RIGHT</tt> </td><td>Stitch along right side
</td></tr>
<tr><td><tt>IPP_FINISHINGS_EDGE_STITCH_TOP</tt> </td><td>Stitch along top edge
</td></tr>
<tr><td><tt>IPP_FINISHINGS_FOLD</tt> </td><td>Fold (any type)
</td></tr>
<tr><td><tt>IPP_FINISHINGS_JOB_OFFSET</tt> </td><td>Offset for binding (any type)
</td></tr>
<tr><td><tt>IPP_FINISHINGS_NONE</tt> </td><td>No finishing
</td></tr>
<tr><td><tt>IPP_FINISHINGS_PUNCH</tt> </td><td>Punch (any location/count)
</td></tr>
<tr><td><tt>IPP_FINISHINGS_SADDLE_STITCH</tt> </td><td>Staple interior
</td></tr>
<tr><td><tt>IPP_FINISHINGS_STAPLE</tt> </td><td>Staple (any location)
</td></tr>
<tr><td><tt>IPP_FINISHINGS_STAPLE_BOTTOM_LEFT</tt> </td><td>Staple bottom left corner
</td></tr>
<tr><td><tt>IPP_FINISHINGS_STAPLE_BOTTOM_RIGHT</tt> </td><td>Staple bottom right corner
</td></tr>
<tr><td><tt>IPP_FINISHINGS_STAPLE_DUAL_BOTTOM</tt> </td><td>Two staples on bottom
</td></tr>
<tr><td><tt>IPP_FINISHINGS_STAPLE_DUAL_LEFT</tt> </td><td>Two staples on left
</td></tr>
<tr><td><tt>IPP_FINISHINGS_STAPLE_DUAL_RIGHT</tt> </td><td>Two staples on right
</td></tr>
<tr><td><tt>IPP_FINISHINGS_STAPLE_DUAL_TOP</tt> </td><td>Two staples on top
</td></tr>
<tr><td><tt>IPP_FINISHINGS_STAPLE_TOP_LEFT</tt> </td><td>Staple top left corner
</td></tr>
<tr><td><tt>IPP_FINISHINGS_STAPLE_TOP_RIGHT</tt> </td><td>Staple top right corner
</td></tr>
<tr><td><tt>IPP_FINISHINGS_TRIM</tt> </td><td>Trim (any type)
</td></tr>
</tbody></table></div>
<!-- NEW PAGE -->
<h3 class='title'><a name='ipp_jstate_e'>ipp_jstate_e</a></h3>
<h4>Description</h4>
<p>
<h4>Values</h4>
<div class='table'><table align='center' border='1' width='80%' summary='Values'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>IPP_JOB_ABORTED</tt> </td><td>Job has aborted due to error
</td></tr>
<tr><td><tt>IPP_JOB_CANCELED</tt> </td><td>Job has been canceled
</td></tr>
<tr><td><tt>IPP_JOB_COMPLETED</tt> </td><td>Job has completed successfully
</td></tr>
<tr><td><tt>IPP_JOB_HELD</tt> </td><td>Job is held for printing
</td></tr>
<tr><td><tt>IPP_JOB_PENDING</tt> </td><td>Job is waiting to be printed
</td></tr>
<tr><td><tt>IPP_JOB_PROCESSING</tt> </td><td>Job is currently printing
</td></tr>
<tr><td><tt>IPP_JOB_STOPPED</tt> </td><td>Job has been stopped
</td></tr>
</tbody></table></div>
<!-- NEW PAGE -->
<h3 class='title'><a name='ipp_op_e'>ipp_op_e</a></h3>
<h4>Description</h4>
<p>
<h4>Values</h4>
<div class='table'><table align='center' border='1' width='80%' summary='Values'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>CUPS_ACCEPT_JOBS</tt> </td><td>Accept new jobs on a printer
</td></tr>
<tr><td><tt>CUPS_ADD_MODIFY_CLASS</tt> </td><td>Add or modify a class
</td></tr>
<tr><td><tt>CUPS_ADD_MODIFY_PRINTER</tt> </td><td>Add or modify a printer
</td></tr>
<tr><td><tt>CUPS_AUTHENTICATE_JOB</tt> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></td><td>Authenticate a job 
</td></tr>
<tr><td><tt>CUPS_DELETE_CLASS</tt> </td><td>Delete a class
</td></tr>
<tr><td><tt>CUPS_DELETE_PRINTER</tt> </td><td>Delete a printer
</td></tr>
<tr><td><tt>CUPS_GET_CLASSES</tt> <span class='info'>&nbsp;DEPRECATED&nbsp;</span></td><td>Get a list of classes 
</td></tr>
<tr><td><tt>CUPS_GET_DEFAULT</tt> </td><td>Get the default printer
</td></tr>
<tr><td><tt>CUPS_GET_DEVICES</tt> </td><td>Get a list of supported devices
</td></tr>
<tr><td><tt>CUPS_GET_PPD</tt> <span class='info'>&nbsp;CUPS 1.3&nbsp;</span></td><td>Get a PPD file 
</td></tr>
<tr><td><tt>CUPS_GET_PPDS</tt> </td><td>Get a list of supported drivers
</td></tr>
<tr><td><tt>CUPS_GET_PRINTERS</tt> </td><td>Get a list of printers and/or classes
</td></tr>
<tr><td><tt>CUPS_MOVE_JOB</tt> </td><td>Move a job to a different printer
</td></tr>
<tr><td><tt>CUPS_REJECT_JOBS</tt> </td><td>Reject new jobs on a printer
</td></tr>
<tr><td><tt>CUPS_SET_DEFAULT</tt> </td><td>Set the default printer
</td></tr>
<tr><td><tt>IPP_ACTIVATE_PRINTER</tt> </td><td>Start a printer @private@
</td></tr>
<tr><td><tt>IPP_CANCEL_CURRENT_JOB</tt> </td><td>Cancel the current job @private@
</td></tr>
<tr><td><tt>IPP_CANCEL_JOB</tt> </td><td>Cancel a job
</td></tr>
<tr><td><tt>IPP_CANCEL_SUBSCRIPTION</tt> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></td><td>Cancel a subscription 
</td></tr>
<tr><td><tt>IPP_CREATE_JOB</tt> </td><td>Create an empty print job
</td></tr>
<tr><td><tt>IPP_CREATE_JOB_SUBSCRIPTION</tt> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></td><td>Create a job subscription 
</td></tr>
<tr><td><tt>IPP_CREATE_PRINTER_SUBSCRIPTION</tt> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></td><td>Create a printer subscription 
</td></tr>
<tr><td><tt>IPP_DEACTIVATE_PRINTER</tt> </td><td>Stop a printer @private@
</td></tr>
<tr><td><tt>IPP_DISABLE_PRINTER</tt> </td><td>Stop a printer
</td></tr>
<tr><td><tt>IPP_ENABLE_PRINTER</tt> </td><td>Start a printer
</td></tr>
<tr><td><tt>IPP_GET_JOBS</tt> </td><td>Get a list of jobs
</td></tr>
<tr><td><tt>IPP_GET_JOB_ATTRIBUTES</tt> </td><td>Get job attributes
</td></tr>
<tr><td><tt>IPP_GET_NOTIFICATIONS</tt> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></td><td>Get notification events 
</td></tr>
<tr><td><tt>IPP_GET_PRINTER_ATTRIBUTES</tt> </td><td>Get printer attributes
</td></tr>
<tr><td><tt>IPP_GET_PRINTER_SUPPORTED_VALUES</tt> </td><td>Get supported attribute values
</td></tr>
<tr><td><tt>IPP_GET_PRINT_SUPPORT_FILES</tt> </td><td>Get printer support files @private@
</td></tr>
<tr><td><tt>IPP_GET_SUBSCRIPTIONS</tt> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></td><td>Get list of subscriptions 
</td></tr>
<tr><td><tt>IPP_GET_SUBSCRIPTION_ATTRIBUTES</tt> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></td><td>Get subscription attributes 
</td></tr>
<tr><td><tt>IPP_HOLD_JOB</tt> </td><td>Hold a job for printing
</td></tr>
<tr><td><tt>IPP_HOLD_NEW_JOBS</tt> </td><td>Hold new jobs @private@
</td></tr>
<tr><td><tt>IPP_PAUSE_PRINTER</tt> </td><td>Stop a printer
</td></tr>
<tr><td><tt>IPP_PAUSE_PRINTER_AFTER_CURRENT_JOB</tt> </td><td>Stop printer after the current job @private@
</td></tr>
<tr><td><tt>IPP_PRINT_JOB</tt> </td><td>Print a single file
</td></tr>
<tr><td><tt>IPP_PRINT_URI</tt> </td><td>Print a single URL @private@
</td></tr>
<tr><td><tt>IPP_PRIVATE</tt> </td><td>Reserved @private@
</td></tr>
<tr><td><tt>IPP_PROMOTE_JOB</tt> </td><td>Promote a job to print sooner @private@
</td></tr>
<tr><td><tt>IPP_PURGE_JOBS</tt> </td><td>Cancel all jobs
</td></tr>
<tr><td><tt>IPP_RELEASE_HELD_NEW_JOBS</tt> </td><td>Release new jobs @private@
</td></tr>
<tr><td><tt>IPP_RELEASE_JOB</tt> </td><td>Release a job for printing
</td></tr>
<tr><td><tt>IPP_RENEW_SUBSCRIPTION</tt> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></td><td>Renew a printer subscription 
</td></tr>
<tr><td><tt>IPP_REPROCESS_JOB</tt> </td><td>Reprint a job @private@
</td></tr>
<tr><td><tt>IPP_RESTART_JOB</tt> </td><td>Reprint a job
</td></tr>
<tr><td><tt>IPP_RESTART_PRINTER</tt> </td><td>Restart a printer @private@
</td></tr>
<tr><td><tt>IPP_RESUME_JOB</tt> </td><td>Resume the current job @private@
</td></tr>
<tr><td><tt>IPP_RESUME_PRINTER</tt> </td><td>Start a printer
</td></tr>
<tr><td><tt>IPP_SCHEDULE_JOB_AFTER</tt> </td><td>Schedule a job to print after another @private@
</td></tr>
<tr><td><tt>IPP_SEND_DOCUMENT</tt> </td><td>Add a file to a job
</td></tr>
<tr><td><tt>IPP_SEND_NOTIFICATIONS</tt> </td><td>Send notification events @private@
</td></tr>
<tr><td><tt>IPP_SEND_URI</tt> </td><td>Add a URL to a job @private@
</td></tr>
<tr><td><tt>IPP_SET_JOB_ATTRIBUTES</tt> </td><td>Set job attributes
</td></tr>
<tr><td><tt>IPP_SET_PRINTER_ATTRIBUTES</tt> </td><td>Set printer attributes @private@
</td></tr>
<tr><td><tt>IPP_SHUTDOWN_PRINTER</tt> </td><td>Turn a printer off @private@
</td></tr>
<tr><td><tt>IPP_STARTUP_PRINTER</tt> </td><td>Turn a printer on @private@
</td></tr>
<tr><td><tt>IPP_SUSPEND_CURRENT_JOB</tt> </td><td>Suspend the current job @private@
</td></tr>
<tr><td><tt>IPP_VALIDATE_JOB</tt> </td><td>Validate job options
</td></tr>
</tbody></table></div>
<!-- NEW PAGE -->
<h3 class='title'><a name='ipp_orient_e'>ipp_orient_e</a></h3>
<h4>Description</h4>
<p>
<h4>Values</h4>
<div class='table'><table align='center' border='1' width='80%' summary='Values'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>IPP_LANDSCAPE</tt> </td><td>90 degrees counter-clockwise
</td></tr>
<tr><td><tt>IPP_PORTRAIT</tt> </td><td>No rotation
</td></tr>
<tr><td><tt>IPP_REVERSE_LANDSCAPE</tt> </td><td>90 degrees clockwise
</td></tr>
<tr><td><tt>IPP_REVERSE_PORTRAIT</tt> </td><td>180 degrees
</td></tr>
</tbody></table></div>
<!-- NEW PAGE -->
<h3 class='title'><a name='ipp_pstate_e'>ipp_pstate_e</a></h3>
<h4>Description</h4>
<p>
<h4>Values</h4>
<div class='table'><table align='center' border='1' width='80%' summary='Values'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>IPP_PRINTER_IDLE</tt> </td><td>Printer is idle
</td></tr>
<tr><td><tt>IPP_PRINTER_PROCESSING</tt> </td><td>Printer is working
</td></tr>
<tr><td><tt>IPP_PRINTER_STOPPED</tt> </td><td>Printer is stopped
</td></tr>
</tbody></table></div>
<!-- NEW PAGE -->
<h3 class='title'><a name='ipp_quality_e'>ipp_quality_e</a></h3>
<h4>Description</h4>
<p>
<h4>Values</h4>
<div class='table'><table align='center' border='1' width='80%' summary='Values'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>IPP_QUALITY_DRAFT</tt> </td><td>Draft quality
</td></tr>
<tr><td><tt>IPP_QUALITY_HIGH</tt> </td><td>High quality
</td></tr>
<tr><td><tt>IPP_QUALITY_NORMAL</tt> </td><td>Normal quality
</td></tr>
</tbody></table></div>
<!-- NEW PAGE -->
<h3 class='title'><a name='ipp_res_e'>ipp_res_e</a></h3>
<h4>Description</h4>
<p>Types and structures...
<h4>Values</h4>
<div class='table'><table align='center' border='1' width='80%' summary='Values'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>IPP_RES_PER_CM</tt> </td><td>Pixels per centimeter
</td></tr>
<tr><td><tt>IPP_RES_PER_INCH</tt> </td><td>Pixels per inch
</td></tr>
</tbody></table></div>
<!-- NEW PAGE -->
<h3 class='title'><a name='ipp_state_e'>ipp_state_e</a></h3>
<h4>Description</h4>
<p>
<h4>Values</h4>
<div class='table'><table align='center' border='1' width='80%' summary='Values'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>IPP_ATTRIBUTE</tt> </td><td>One or more attributes need to be sent/received
</td></tr>
<tr><td><tt>IPP_DATA</tt> </td><td>IPP request data needs to be sent/received
</td></tr>
<tr><td><tt>IPP_ERROR</tt> </td><td>An error occurred
</td></tr>
<tr><td><tt>IPP_HEADER</tt> </td><td>The request header needs to be sent/received
</td></tr>
<tr><td><tt>IPP_IDLE</tt> </td><td>Nothing is happening/request completed
</td></tr>
</tbody></table></div>
<!-- NEW PAGE -->
<h3 class='title'><a name='ipp_status_e'>ipp_status_e</a></h3>
<h4>Description</h4>
<p>IPP status codes...
<h4>Values</h4>
<div class='table'><table align='center' border='1' width='80%' summary='Values'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>CUPS_SEE_OTHER</tt> </td><td>cups-see-other
</td></tr>
<tr><td><tt>IPP_ATTRIBUTES</tt> </td><td>client-error-attributes-or-values-not-supported
</td></tr>
<tr><td><tt>IPP_ATTRIBUTES_NOT_SETTABLE</tt> </td><td>client-error-attributes-not-settable
</td></tr>
<tr><td><tt>IPP_BAD_REQUEST</tt> </td><td>client-error-bad-request
</td></tr>
<tr><td><tt>IPP_CHARSET</tt> </td><td>client-error-charset-not-supported
</td></tr>
<tr><td><tt>IPP_COMPRESSION_ERROR</tt> </td><td>client-error-compression-error
</td></tr>
<tr><td><tt>IPP_COMPRESSION_NOT_SUPPORTED</tt> </td><td>client-error-compression-not-supported
</td></tr>
<tr><td><tt>IPP_CONFLICT</tt> </td><td>client-error-conflicting-attributes
</td></tr>
<tr><td><tt>IPP_DEVICE_ERROR</tt> </td><td>server-error-device-error
</td></tr>
<tr><td><tt>IPP_DOCUMENT_ACCESS_ERROR</tt> </td><td>client-error-document-access-error
</td></tr>
<tr><td><tt>IPP_DOCUMENT_FORMAT</tt> </td><td>client-error-document-format-not-supported
</td></tr>
<tr><td><tt>IPP_DOCUMENT_FORMAT_ERROR</tt> </td><td>client-error-document-format-error
</td></tr>
<tr><td><tt>IPP_ERROR_JOB_CANCELED</tt> </td><td>server-error-job-canceled
</td></tr>
<tr><td><tt>IPP_FORBIDDEN</tt> </td><td>client-error-forbidden
</td></tr>
<tr><td><tt>IPP_GONE</tt> </td><td>client-error-gone
</td></tr>
<tr><td><tt>IPP_IGNORED_ALL_NOTIFICATIONS</tt> </td><td>client-error-ignored-all-notifications
</td></tr>
<tr><td><tt>IPP_IGNORED_ALL_SUBSCRIPTIONS</tt> </td><td>client-error-ignored-all-subscriptions
</td></tr>
<tr><td><tt>IPP_INTERNAL_ERROR</tt> </td><td>server-error-internal-error
</td></tr>
<tr><td><tt>IPP_MULTIPLE_JOBS_NOT_SUPPORTED</tt> </td><td>server-error-multiple-document-jobs-not-supported
</td></tr>
<tr><td><tt>IPP_NOT_ACCEPTING</tt> </td><td>server-error-not-accepting-jobs
</td></tr>
<tr><td><tt>IPP_NOT_AUTHENTICATED</tt> </td><td>client-error-not-authenticated
</td></tr>
<tr><td><tt>IPP_NOT_AUTHORIZED</tt> </td><td>client-error-not-authorized
</td></tr>
<tr><td><tt>IPP_NOT_FOUND</tt> </td><td>client-error-not-found
</td></tr>
<tr><td><tt>IPP_NOT_POSSIBLE</tt> </td><td>client-error-not-possible
</td></tr>
<tr><td><tt>IPP_OK</tt> </td><td>successful-ok
</td></tr>
<tr><td><tt>IPP_OK_BUT_CANCEL_SUBSCRIPTION</tt> </td><td>successful-ok-but-cancel-subscription
</td></tr>
<tr><td><tt>IPP_OK_CONFLICT</tt> </td><td>successful-ok-conflicting-attributes
</td></tr>
<tr><td><tt>IPP_OK_EVENTS_COMPLETE</tt> </td><td>successful-ok-events-complete
</td></tr>
<tr><td><tt>IPP_OK_IGNORED_NOTIFICATIONS</tt> </td><td>successful-ok-ignored-notifications
</td></tr>
<tr><td><tt>IPP_OK_IGNORED_SUBSCRIPTIONS</tt> </td><td>successful-ok-ignored-subscriptions
</td></tr>
<tr><td><tt>IPP_OK_SUBST</tt> </td><td>successful-ok-ignored-or-substituted-attributes
</td></tr>
<tr><td><tt>IPP_OK_TOO_MANY_EVENTS</tt> </td><td>successful-ok-too-many-events
</td></tr>
<tr><td><tt>IPP_OPERATION_NOT_SUPPORTED</tt> </td><td>server-error-operation-not-supported
</td></tr>
<tr><td><tt>IPP_PRINTER_BUSY</tt> </td><td>server-error-busy
</td></tr>
<tr><td><tt>IPP_PRINTER_IS_DEACTIVATED</tt> </td><td>server-error-printer-is-deactivated
</td></tr>
<tr><td><tt>IPP_PRINT_SUPPORT_FILE_NOT_FOUND</tt> </td><td>client-error-print-support-file-not-found
</td></tr>
<tr><td><tt>IPP_REDIRECTION_OTHER_SITE</tt> </td><td>
</td></tr>
<tr><td><tt>IPP_REQUEST_ENTITY</tt> </td><td>client-error-request-entity-too-large
</td></tr>
<tr><td><tt>IPP_REQUEST_VALUE</tt> </td><td>client-error-request-value-too-long
</td></tr>
<tr><td><tt>IPP_SERVICE_UNAVAILABLE</tt> </td><td>server-error-service-unavailable
</td></tr>
<tr><td><tt>IPP_TEMPORARY_ERROR</tt> </td><td>server-error-temporary-error
</td></tr>
<tr><td><tt>IPP_TIMEOUT</tt> </td><td>client-error-timeout
</td></tr>
<tr><td><tt>IPP_TOO_MANY_SUBSCRIPTIONS</tt> </td><td>client-error-too-many-subscriptions
</td></tr>
<tr><td><tt>IPP_URI_SCHEME</tt> </td><td>client-error-uri-scheme-not-supported
</td></tr>
<tr><td><tt>IPP_VERSION_NOT_SUPPORTED</tt> </td><td>server-error-version-not-supported
</td></tr>
</tbody></table></div>
<!-- NEW PAGE -->
<h3 class='title'><a name='ipp_tag_e'>ipp_tag_e</a></h3>
<h4>Description</h4>
<p>Format tags for attributes...
<h4>Values</h4>
<div class='table'><table align='center' border='1' width='80%' summary='Values'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>IPP_TAG_ADMINDEFINE</tt> </td><td>Admin-defined value
</td></tr>
<tr><td><tt>IPP_TAG_BEGIN_COLLECTION</tt> </td><td>Beginning of collection value
</td></tr>
<tr><td><tt>IPP_TAG_BOOLEAN</tt> </td><td>Boolean value
</td></tr>
<tr><td><tt>IPP_TAG_CHARSET</tt> </td><td>Character set value
</td></tr>
<tr><td><tt>IPP_TAG_COPY</tt> </td><td>Bitflag for copied attribute values
</td></tr>
<tr><td><tt>IPP_TAG_DATE</tt> </td><td>Date/time value
</td></tr>
<tr><td><tt>IPP_TAG_DEFAULT</tt> </td><td>Default value
</td></tr>
<tr><td><tt>IPP_TAG_DELETEATTR</tt> </td><td>Delete-attribute value
</td></tr>
<tr><td><tt>IPP_TAG_END</tt> </td><td>End-of-attributes
</td></tr>
<tr><td><tt>IPP_TAG_END_COLLECTION</tt> </td><td>End of collection value
</td></tr>
<tr><td><tt>IPP_TAG_ENUM</tt> </td><td>Enumeration value
</td></tr>
<tr><td><tt>IPP_TAG_EVENT_NOTIFICATION</tt> </td><td>Event group
</td></tr>
<tr><td><tt>IPP_TAG_INTEGER</tt> </td><td>Integer value
</td></tr>
<tr><td><tt>IPP_TAG_JOB</tt> </td><td>Job group
</td></tr>
<tr><td><tt>IPP_TAG_KEYWORD</tt> </td><td>Keyword value
</td></tr>
<tr><td><tt>IPP_TAG_LANGUAGE</tt> </td><td>Language value
</td></tr>
<tr><td><tt>IPP_TAG_MASK</tt> </td><td>Mask for copied attribute values
</td></tr>
<tr><td><tt>IPP_TAG_MEMBERNAME</tt> </td><td>Collection member name value
</td></tr>
<tr><td><tt>IPP_TAG_MIMETYPE</tt> </td><td>MIME media type value
</td></tr>
<tr><td><tt>IPP_TAG_NAME</tt> </td><td>Name value
</td></tr>
<tr><td><tt>IPP_TAG_NAMELANG</tt> </td><td>Name-with-language value
</td></tr>
<tr><td><tt>IPP_TAG_NOTSETTABLE</tt> </td><td>Not-settable value
</td></tr>
<tr><td><tt>IPP_TAG_NOVALUE</tt> </td><td>No-value value
</td></tr>
<tr><td><tt>IPP_TAG_OPERATION</tt> </td><td>Operation group
</td></tr>
<tr><td><tt>IPP_TAG_PRINTER</tt> </td><td>Printer group
</td></tr>
<tr><td><tt>IPP_TAG_RANGE</tt> </td><td>Range value
</td></tr>
<tr><td><tt>IPP_TAG_RESOLUTION</tt> </td><td>Resolution value
</td></tr>
<tr><td><tt>IPP_TAG_STRING</tt> </td><td>Octet string value
</td></tr>
<tr><td><tt>IPP_TAG_SUBSCRIPTION</tt> </td><td>Subscription group
</td></tr>
<tr><td><tt>IPP_TAG_TEXT</tt> </td><td>Text value
</td></tr>
<tr><td><tt>IPP_TAG_TEXTLANG</tt> </td><td>Text-with-language value
</td></tr>
<tr><td><tt>IPP_TAG_UNKNOWN</tt> </td><td>Unknown value
</td></tr>
<tr><td><tt>IPP_TAG_UNSUPPORTED_GROUP</tt> </td><td>Unsupported attributes group
</td></tr>
<tr><td><tt>IPP_TAG_UNSUPPORTED_VALUE</tt> </td><td>Unsupported value
</td></tr>
<tr><td><tt>IPP_TAG_URI</tt> </td><td>URI value
</td></tr>
<tr><td><tt>IPP_TAG_URISCHEME</tt> </td><td>URI scheme value
</td></tr>
<tr><td><tt>IPP_TAG_ZERO</tt> </td><td>Zero tag - used for separators
</td></tr>
</tbody></table></div>
<!-- NEW PAGE -->
<h2 class='title'><a name='FUNCTIONS'>Functions</a></h2>
<ul>
	<li><a href='#cupsDoAuthentication'><tt>cupsDoAuthentication()</tt></a> <span class='info'>&nbsp;CUPS 1.1.20&nbsp;</span></li>
	<li><a href='#cupsDoFileRequest'><tt>cupsDoFileRequest()</tt></a> </li>
	<li><a href='#cupsDoIORequest'><tt>cupsDoIORequest()</tt></a> <span class='info'>&nbsp;CUPS 1.3&nbsp;</span></li>
	<li><a href='#cupsDoRequest'><tt>cupsDoRequest()</tt></a> </li>
	<li><a href='#cupsEncodeOptions'><tt>cupsEncodeOptions()</tt></a> </li>
	<li><a href='#cupsEncodeOptions2'><tt>cupsEncodeOptions2()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
	<li><a href='#httpAddrAny'><tt>httpAddrAny()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
	<li><a href='#httpAddrEqual'><tt>httpAddrEqual()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
	<li><a href='#httpAddrLength'><tt>httpAddrLength()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
	<li><a href='#httpAddrLocalhost'><tt>httpAddrLocalhost()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
	<li><a href='#httpAddrLookup'><tt>httpAddrLookup()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
	<li><a href='#httpAddrString'><tt>httpAddrString()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
	<li><a href='#httpAssembleURI'><tt>httpAssembleURI()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
	<li><a href='#httpAssembleURIf'><tt>httpAssembleURIf()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
	<li><a href='#httpBlocking'><tt>httpBlocking()</tt></a> </li>
	<li><a href='#httpCheck'><tt>httpCheck()</tt></a> </li>
	<li><a href='#httpClearCookie'><tt>httpClearCookie()</tt></a> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></li>
	<li><a href='#httpClearFields'><tt>httpClearFields()</tt></a> </li>
	<li><a href='#httpClose'><tt>httpClose()</tt></a> </li>
	<li><a href='#httpConnect'><tt>httpConnect()</tt></a> </li>
	<li><a href='#httpConnectEncrypt'><tt>httpConnectEncrypt()</tt></a> </li>
	<li><a href='#httpDecode64'><tt>httpDecode64()</tt></a> <span class='info'>&nbsp;DEPRECATED&nbsp;</span></li>
	<li><a href='#httpDecode64_2'><tt>httpDecode64_2()</tt></a> <span class='info'>&nbsp;CUPS 1.1.21&nbsp;</span></li>
	<li><a href='#httpDelete'><tt>httpDelete()</tt></a> </li>
	<li><a href='#httpEncode64'><tt>httpEncode64()</tt></a> <span class='info'>&nbsp;DEPRECATED&nbsp;</span></li>
	<li><a href='#httpEncode64_2'><tt>httpEncode64_2()</tt></a> <span class='info'>&nbsp;CUPS 1.1.21&nbsp;</span></li>
	<li><a href='#httpEncryption'><tt>httpEncryption()</tt></a> </li>
	<li><a href='#httpError'><tt>httpError()</tt></a> </li>
	<li><a href='#httpFlush'><tt>httpFlush()</tt></a> </li>
	<li><a href='#httpFlushWrite'><tt>httpFlushWrite()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
	<li><a href='#httpGet'><tt>httpGet()</tt></a> </li>
	<li><a href='#httpGetAuthString'><tt>httpGetAuthString()</tt></a> <span class='info'>&nbsp;CUPS 1.3&nbsp;</span></li>
	<li><a href='#httpGetBlocking'><tt>httpGetBlocking()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
	<li><a href='#httpGetCookie'><tt>httpGetCookie()</tt></a> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></li>
	<li><a href='#httpGetDateString'><tt>httpGetDateString()</tt></a> <span class='info'>&nbsp;DEPRECATED&nbsp;</span></li>
	<li><a href='#httpGetDateString2'><tt>httpGetDateString2()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
	<li><a href='#httpGetDateTime'><tt>httpGetDateTime()</tt></a> </li>
	<li><a href='#httpGetFd'><tt>httpGetFd()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
	<li><a href='#httpGetField'><tt>httpGetField()</tt></a> </li>
	<li><a href='#httpGetHostByName'><tt>httpGetHostByName()</tt></a> <span class='info'>&nbsp;DEPRECATED&nbsp;</span></li>
	<li><a href='#httpGetHostname'><tt>httpGetHostname()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
	<li><a href='#httpGetLength'><tt>httpGetLength()</tt></a> <span class='info'>&nbsp;DEPRECATED&nbsp;</span></li>
	<li><a href='#httpGetLength2'><tt>httpGetLength2()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
	<li><a href='#httpGetStatus'><tt>httpGetStatus()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
	<li><a href='#httpGetSubField'><tt>httpGetSubField()</tt></a> <span class='info'>&nbsp;DEPRECATED&nbsp;</span></li>
	<li><a href='#httpGetSubField2'><tt>httpGetSubField2()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
	<li><a href='#httpGets'><tt>httpGets()</tt></a> </li>
	<li><a href='#httpHead'><tt>httpHead()</tt></a> </li>
	<li><a href='#httpInitialize'><tt>httpInitialize()</tt></a> </li>
	<li><a href='#httpMD5'><tt>httpMD5()</tt></a> </li>
	<li><a href='#httpMD5Final'><tt>httpMD5Final()</tt></a> </li>
	<li><a href='#httpMD5String'><tt>httpMD5String()</tt></a> </li>
	<li><a href='#httpOptions'><tt>httpOptions()</tt></a> </li>
	<li><a href='#httpPost'><tt>httpPost()</tt></a> </li>
	<li><a href='#httpPut'><tt>httpPut()</tt></a> </li>
	<li><a href='#httpRead'><tt>httpRead()</tt></a> <span class='info'>&nbsp;DEPRECATED&nbsp;</span></li>
	<li><a href='#httpRead2'><tt>httpRead2()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
	<li><a href='#httpReconnect'><tt>httpReconnect()</tt></a> </li>
	<li><a href='#httpSeparate'><tt>httpSeparate()</tt></a> <span class='info'>&nbsp;DEPRECATED&nbsp;</span></li>
	<li><a href='#httpSeparate2'><tt>httpSeparate2()</tt></a> <span class='info'>&nbsp;CUPS 1.1.21&nbsp;</span></li>
	<li><a href='#httpSeparateURI'><tt>httpSeparateURI()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
	<li><a href='#httpSetAuthString'><tt>httpSetAuthString()</tt></a> <span class='info'>&nbsp;CUPS 1.3&nbsp;</span></li>
	<li><a href='#httpSetCookie'><tt>httpSetCookie()</tt></a> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></li>
	<li><a href='#httpSetExpect'><tt>httpSetExpect()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
	<li><a href='#httpSetField'><tt>httpSetField()</tt></a> </li>
	<li><a href='#httpSetLength'><tt>httpSetLength()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
	<li><a href='#httpStatus'><tt>httpStatus()</tt></a> </li>
	<li><a href='#httpTrace'><tt>httpTrace()</tt></a> </li>
	<li><a href='#httpUpdate'><tt>httpUpdate()</tt></a> </li>
	<li><a href='#httpWait'><tt>httpWait()</tt></a> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></li>
	<li><a href='#httpWrite'><tt>httpWrite()</tt></a> <span class='info'>&nbsp;DEPRECATED&nbsp;</span></li>
	<li><a href='#httpWrite2'><tt>httpWrite2()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
	<li><a href='#ippAddBoolean'><tt>ippAddBoolean()</tt></a> </li>
	<li><a href='#ippAddBooleans'><tt>ippAddBooleans()</tt></a> </li>
	<li><a href='#ippAddCollection'><tt>ippAddCollection()</tt></a> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></li>
	<li><a href='#ippAddCollections'><tt>ippAddCollections()</tt></a> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></li>
	<li><a href='#ippAddDate'><tt>ippAddDate()</tt></a> </li>
	<li><a href='#ippAddInteger'><tt>ippAddInteger()</tt></a> </li>
	<li><a href='#ippAddIntegers'><tt>ippAddIntegers()</tt></a> </li>
	<li><a href='#ippAddOctetString'><tt>ippAddOctetString()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
	<li><a href='#ippAddRange'><tt>ippAddRange()</tt></a> </li>
	<li><a href='#ippAddRanges'><tt>ippAddRanges()</tt></a> </li>
	<li><a href='#ippAddResolution'><tt>ippAddResolution()</tt></a> </li>
	<li><a href='#ippAddResolutions'><tt>ippAddResolutions()</tt></a> </li>
	<li><a href='#ippAddSeparator'><tt>ippAddSeparator()</tt></a> </li>
	<li><a href='#ippAddString'><tt>ippAddString()</tt></a> </li>
	<li><a href='#ippAddStrings'><tt>ippAddStrings()</tt></a> </li>
	<li><a href='#ippDateToTime'><tt>ippDateToTime()</tt></a> </li>
	<li><a href='#ippDelete'><tt>ippDelete()</tt></a> </li>
	<li><a href='#ippDeleteAttribute'><tt>ippDeleteAttribute()</tt></a> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></li>
	<li><a href='#ippErrorString'><tt>ippErrorString()</tt></a> </li>
	<li><a href='#ippErrorValue'><tt>ippErrorValue()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
	<li><a href='#ippFindAttribute'><tt>ippFindAttribute()</tt></a> </li>
	<li><a href='#ippFindNextAttribute'><tt>ippFindNextAttribute()</tt></a> </li>
	<li><a href='#ippLength'><tt>ippLength()</tt></a> </li>
	<li><a href='#ippNew'><tt>ippNew()</tt></a> </li>
	<li><a href='#ippNewRequest'><tt>ippNewRequest()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
	<li><a href='#ippOpString'><tt>ippOpString()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
	<li><a href='#ippOpValue'><tt>ippOpValue()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
	<li><a href='#ippPort'><tt>ippPort()</tt></a> </li>
	<li><a href='#ippRead'><tt>ippRead()</tt></a> </li>
	<li><a href='#ippReadFile'><tt>ippReadFile()</tt></a> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></li>
	<li><a href='#ippReadIO'><tt>ippReadIO()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
	<li><a href='#ippSetPort'><tt>ippSetPort()</tt></a> </li>
	<li><a href='#ippTimeToDate'><tt>ippTimeToDate()</tt></a> </li>
	<li><a href='#ippWrite'><tt>ippWrite()</tt></a> </li>
	<li><a href='#ippWriteFile'><tt>ippWriteFile()</tt></a> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></li>
	<li><a href='#ippWriteIO'><tt>ippWriteIO()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
</ul>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.20&nbsp;</span><a name='cupsDoAuthentication'>cupsDoAuthentication()</a></h3>
<h4>Description</h4>
<p>Authenticate a request.
<p>This function should be called in response to a HTTP_UNAUTHORIZED
status, prior to resubmitting your request.


<h4>Syntax</h4>
<p><tt>
int<br>
cupsDoAuthentication(
    <a href='#http_t'>http_t</a> * http,
    const char * method,
    const char * resource);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection to server</td></tr>
<tr><td><tt>method</tt></td><td>Request method (GET, POST, PUT)</td></tr>
<tr><td><tt>resource</tt></td><td>Resource path</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>0 on success, -1 on error</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='cupsDoFileRequest'>cupsDoFileRequest()</a></h3>
<h4>Description</h4>
<p>Do an IPP request with a file.
<p>This function sends the IPP request to the specified server, retrying
and authenticating as necessary.  The request is freed with ippDelete()
after receiving a valid IPP response.
<h4>Syntax</h4>
<p><tt>
<a href='#ipp_t'>ipp_t</a> *<br>
cupsDoFileRequest(
    <a href='#http_t'>http_t</a> * http,
    <a href='#ipp_t'>ipp_t</a> * request,
    const char * resource,
    const char * filename);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection to server</td></tr>
<tr><td><tt>request</tt></td><td>IPP request</td></tr>
<tr><td><tt>resource</tt></td><td>HTTP resource for POST</td></tr>
<tr><td><tt>filename</tt></td><td>File to send or NULL for none</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Response data</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.3&nbsp;</span><a name='cupsDoIORequest'>cupsDoIORequest()</a></h3>
<h4>Description</h4>
<p>Do an IPP request with file descriptors.
<p>This function sends the IPP request to the specified server, retrying
and authenticating as necessary.  The request is freed with ippDelete()
after receiving a valid IPP response.
<p>If &quot;infile&quot; is a valid file descriptor, cupsDoIORequest() copies
all of the data from the file after the IPP request message.
<p>If &quot;outfile&quot; is a valid file descriptor, cupsDoIORequest() copies
all of the data after the IPP response message to the file.


<h4>Syntax</h4>
<p><tt>
<a href='#ipp_t'>ipp_t</a> *<br>
cupsDoIORequest(
    <a href='#http_t'>http_t</a> * http,
    <a href='#ipp_t'>ipp_t</a> * request,
    const char * resource,
    int infile,
    int outfile);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection to server</td></tr>
<tr><td><tt>request</tt></td><td>IPP request</td></tr>
<tr><td><tt>resource</tt></td><td>HTTP resource for POST</td></tr>
<tr><td><tt>infile</tt></td><td>File to read from or -1 for none</td></tr>
<tr><td><tt>outfile</tt></td><td>File to write to or -1 for none</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Response data</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='cupsDoRequest'>cupsDoRequest()</a></h3>
<h4>Description</h4>
<p>Do an IPP request.
<p>This function sends the IPP request to the specified server, retrying
and authenticating as necessary.  The request is freed with ippDelete()
after receiving a valid IPP response.
<h4>Syntax</h4>
<p><tt>
<a href='#ipp_t'>ipp_t</a> *<br>
cupsDoRequest(
    <a href='#http_t'>http_t</a> * http,
    <a href='#ipp_t'>ipp_t</a> * request,
    const char * resource);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection to server</td></tr>
<tr><td><tt>request</tt></td><td>IPP request</td></tr>
<tr><td><tt>resource</tt></td><td>HTTP resource for POST</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Response data</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='cupsEncodeOptions'>cupsEncodeOptions()</a></h3>
<h4>Description</h4>
<p>Encode printer options into IPP attributes.
<p>This function adds operation, job, and then subscription attributes,
in that order. Use the cupsEncodeOptions2() function to add attributes
for a single group.
<h4>Syntax</h4>
<p><tt>
void<br>
cupsEncodeOptions(
    <a href='#ipp_t'>ipp_t</a> * ipp,
    int num_options,
    cups_option_t * options);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>Request to add to</td></tr>
<tr><td><tt>num_options</tt></td><td>Number of options</td></tr>
<tr><td><tt>options</tt></td><td>Options</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='cupsEncodeOptions2'>cupsEncodeOptions2()</a></h3>
<h4>Description</h4>
<p>Encode printer options into IPP attributes for a group.
<p>This function only adds attributes for a single group. Call this
function multiple times for each group, or use cupsEncodeOptions()
to add the standard groups.


<h4>Syntax</h4>
<p><tt>
void<br>
cupsEncodeOptions2(
    <a href='#ipp_t'>ipp_t</a> * ipp,
    int num_options,
    cups_option_t * options,
    ipp_tag_t group_tag);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>Request to add to</td></tr>
<tr><td><tt>num_options</tt></td><td>Number of options</td></tr>
<tr><td><tt>options</tt></td><td>Options</td></tr>
<tr><td><tt>group_tag</tt></td><td>Group to encode</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpAddrAny'>httpAddrAny()</a></h3>
<h4>Description</h4>
<p>Check for the &quot;any&quot; address.


<h4>Syntax</h4>
<p><tt>
int<br>
httpAddrAny(
    const <a href='#http_addr_t'>http_addr_t</a> * addr);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>addr</tt></td><td>Address to check</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>1 if &quot;any&quot;, 0 otherwise</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpAddrEqual'>httpAddrEqual()</a></h3>
<h4>Description</h4>
<p>Compare two addresses.


<h4>Syntax</h4>
<p><tt>
int<br>
httpAddrEqual(
    const <a href='#http_addr_t'>http_addr_t</a> * addr1,
    const <a href='#http_addr_t'>http_addr_t</a> * addr2);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>addr1</tt></td><td>First address</td></tr>
<tr><td><tt>addr2</tt></td><td>Second address</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>1 if equal, 0 if not</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpAddrLength'>httpAddrLength()</a></h3>
<h4>Description</h4>
<p>Return the length of the address in bytes.


<h4>Syntax</h4>
<p><tt>
int<br>
httpAddrLength(
    const <a href='#http_addr_t'>http_addr_t</a> * addr);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>addr</tt></td><td>Address</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Length in bytes</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpAddrLocalhost'>httpAddrLocalhost()</a></h3>
<h4>Description</h4>
<p>Check for the local loopback address.


<h4>Syntax</h4>
<p><tt>
int<br>
httpAddrLocalhost(
    const <a href='#http_addr_t'>http_addr_t</a> * addr);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>addr</tt></td><td>Address to check</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>1 if local host, 0 otherwise</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpAddrLookup'>httpAddrLookup()</a></h3>
<h4>Description</h4>
<p>Lookup the hostname associated with the address.


<h4>Syntax</h4>
<p><tt>
char *<br>
httpAddrLookup(
    const <a href='#http_addr_t'>http_addr_t</a> * addr,
    char * name,
    int namelen);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>addr</tt></td><td>Address to lookup</td></tr>
<tr><td><tt>name</tt></td><td>Host name buffer</td></tr>
<tr><td><tt>namelen</tt></td><td>Size of name buffer</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Host name</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpAddrString'>httpAddrString()</a></h3>
<h4>Description</h4>
<p>Convert an address to a numeric string.


<h4>Syntax</h4>
<p><tt>
char *<br>
httpAddrString(
    const <a href='#http_addr_t'>http_addr_t</a> * addr,
    char * s,
    int slen);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>addr</tt></td><td>Address to convert</td></tr>
<tr><td><tt>s</tt></td><td>String buffer</td></tr>
<tr><td><tt>slen</tt></td><td>Length of string</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Numeric address string</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpAssembleURI'>httpAssembleURI()</a></h3>
<h4>Description</h4>
<p>Assemble a uniform resource identifier from its
components.
<p>This function escapes reserved characters in the URI depending on the
value of the &quot;encoding&quot; argument.  You should use this function in
place of traditional string functions whenever you need to create a
URI string.


<h4>Syntax</h4>
<p><tt>
http_uri_status_t<br>
httpAssembleURI(
    http_uri_coding_t encoding,
    char * uri,
    int urilen,
    const char * scheme,
    const char * username,
    const char * host,
    int port,
    const char * resource);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>encoding</tt></td><td>Encoding flags</td></tr>
<tr><td><tt>uri</tt></td><td>URI buffer</td></tr>
<tr><td><tt>urilen</tt></td><td>Size of URI buffer</td></tr>
<tr><td><tt>scheme</tt></td><td>Scheme name</td></tr>
<tr><td><tt>username</tt></td><td>Username</td></tr>
<tr><td><tt>host</tt></td><td>Hostname or address</td></tr>
<tr><td><tt>port</tt></td><td>Port number</td></tr>
<tr><td><tt>resource</tt></td><td>Resource</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>URI status</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpAssembleURIf'>httpAssembleURIf()</a></h3>
<h4>Description</h4>
<p>Assemble a uniform resource identifier from its
components with a formatted resource.
<p>This function creates a formatted version of the resource string
argument &quot;resourcef&quot; and escapes reserved characters in the URI
depending on the value of the &quot;encoding&quot; argument.  You should use
this function in place of traditional string functions whenever
you need to create a URI string.


<h4>Syntax</h4>
<p><tt>
http_uri_status_t<br>
httpAssembleURIf(
    http_uri_coding_t encoding,
    char * uri,
    int urilen,
    const char * scheme,
    const char * username,
    const char * host,
    int port,
    const char * resourcef,
    ...);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>encoding</tt></td><td>Encoding flags</td></tr>
<tr><td><tt>uri</tt></td><td>URI buffer</td></tr>
<tr><td><tt>urilen</tt></td><td>Size of URI buffer</td></tr>
<tr><td><tt>scheme</tt></td><td>Scheme name</td></tr>
<tr><td><tt>username</tt></td><td>Username</td></tr>
<tr><td><tt>host</tt></td><td>Hostname or address</td></tr>
<tr><td><tt>port</tt></td><td>Port number</td></tr>
<tr><td><tt>resourcef</tt></td><td>Printf-style resource</td></tr>
<tr><td><tt>...</tt></td><td>Additional arguments as needed</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>URI status</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpBlocking'>httpBlocking()</a></h3>
<h4>Description</h4>
<p>Set blocking/non-blocking behavior on a connection.
<h4>Syntax</h4>
<p><tt>
void<br>
httpBlocking(
    <a href='#http_t'>http_t</a> * http,
    int b);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
<tr><td><tt>b</tt></td><td>1 = blocking, 0 = non-blocking</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpCheck'>httpCheck()</a></h3>
<h4>Description</h4>
<p>Check to see if there is a pending response from the server.
<h4>Syntax</h4>
<p><tt>
int<br>
httpCheck(
    <a href='#http_t'>http_t</a> * http);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>0 = no data, 1 = data available</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span><a name='httpClearCookie'>httpClearCookie()</a></h3>
<h4>Description</h4>
<p>Clear the cookie value(s).


<h4>Syntax</h4>
<p><tt>
void<br>
httpClearCookie(
    <a href='#http_t'>http_t</a> * http);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpClearFields'>httpClearFields()</a></h3>
<h4>Description</h4>
<p>Clear HTTP request fields.
<h4>Syntax</h4>
<p><tt>
void<br>
httpClearFields(
    <a href='#http_t'>http_t</a> * http);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpClose'>httpClose()</a></h3>
<h4>Description</h4>
<p>Close an HTTP connection...
<h4>Syntax</h4>
<p><tt>
void<br>
httpClose(
    <a href='#http_t'>http_t</a> * http);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpConnect'>httpConnect()</a></h3>
<h4>Description</h4>
<p>Connect to a HTTP server.
<h4>Syntax</h4>
<p><tt>
<a href='#http_t'>http_t</a> *<br>
httpConnect(
    const char * host,
    int port);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>host</tt></td><td>Host to connect to</td></tr>
<tr><td><tt>port</tt></td><td>Port number</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>New HTTP connection</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpConnectEncrypt'>httpConnectEncrypt()</a></h3>
<h4>Description</h4>
<p>Connect to a HTTP server using encryption.
<h4>Syntax</h4>
<p><tt>
<a href='#http_t'>http_t</a> *<br>
httpConnectEncrypt(
    const char * host,
    int port,
    <a href='#http_encryption_t'>http_encryption_t</a> encryption);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>host</tt></td><td>Host to connect to</td></tr>
<tr><td><tt>port</tt></td><td>Port number</td></tr>
<tr><td><tt>encryption</tt></td><td>Type of encryption to use</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>New HTTP connection</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;DEPRECATED&nbsp;</span><a name='httpDecode64'>httpDecode64()</a></h3>
<h4>Description</h4>
<p>Base64-decode a string.
<p>This function is deprecated. Use the httpDecode64_2() function instead
which provides buffer length arguments.


<h4>Syntax</h4>
<p><tt>
char *<br>
httpDecode64(
    char * out,
    const char * in);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>out</tt></td><td>String to write to</td></tr>
<tr><td><tt>in</tt></td><td>String to read from</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Decoded string</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.21&nbsp;</span><a name='httpDecode64_2'>httpDecode64_2()</a></h3>
<h4>Description</h4>
<p>Base64-decode a string.


<h4>Syntax</h4>
<p><tt>
char *<br>
httpDecode64_2(
    char * out,
    int * outlen,
    const char * in);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>out</tt></td><td>String to write to</td></tr>
<tr><td><tt>outlen</tt></td><td>Size of output string</td></tr>
<tr><td><tt>in</tt></td><td>String to read from</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Decoded string</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpDelete'>httpDelete()</a></h3>
<h4>Description</h4>
<p>Send a DELETE request to the server.
<h4>Syntax</h4>
<p><tt>
int<br>
httpDelete(
    <a href='#http_t'>http_t</a> * http,
    const char * uri);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
<tr><td><tt>uri</tt></td><td>URI to delete</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Status of call (0 = success)</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;DEPRECATED&nbsp;</span><a name='httpEncode64'>httpEncode64()</a></h3>
<h4>Description</h4>
<p>Base64-encode a string.
<p>This function is deprecated. Use the httpEncode64_2() function instead
which provides buffer length arguments.


<h4>Syntax</h4>
<p><tt>
char *<br>
httpEncode64(
    char * out,
    const char * in);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>out</tt></td><td>String to write to</td></tr>
<tr><td><tt>in</tt></td><td>String to read from</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Encoded string</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.21&nbsp;</span><a name='httpEncode64_2'>httpEncode64_2()</a></h3>
<h4>Description</h4>
<p>Base64-encode a string.


<h4>Syntax</h4>
<p><tt>
char *<br>
httpEncode64_2(
    char * out,
    int outlen,
    const char * in,
    int inlen);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>out</tt></td><td>String to write to</td></tr>
<tr><td><tt>outlen</tt></td><td>Size of output string</td></tr>
<tr><td><tt>in</tt></td><td>String to read from</td></tr>
<tr><td><tt>inlen</tt></td><td>Size of input string</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Encoded string</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpEncryption'>httpEncryption()</a></h3>
<h4>Description</h4>
<p>Set the required encryption on the link.
<h4>Syntax</h4>
<p><tt>
int<br>
httpEncryption(
    <a href='#http_t'>http_t</a> * http,
    <a href='#http_encryption_t'>http_encryption_t</a> e);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
<tr><td><tt>e</tt></td><td>New encryption preference</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>-1 on error, 0 on success</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpError'>httpError()</a></h3>
<h4>Description</h4>
<p>Get the last error on a connection.
<h4>Syntax</h4>
<p><tt>
int<br>
httpError(
    <a href='#http_t'>http_t</a> * http);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Error code (errno) value</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpFlush'>httpFlush()</a></h3>
<h4>Description</h4>
<p>Flush data from a HTTP connection.
<h4>Syntax</h4>
<p><tt>
void<br>
httpFlush(
    <a href='#http_t'>http_t</a> * http);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpFlushWrite'>httpFlushWrite()</a></h3>
<h4>Description</h4>
<p>Flush data in write buffer.


<h4>Syntax</h4>
<p><tt>
int<br>
httpFlushWrite(
    <a href='#http_t'>http_t</a> * http);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Bytes written or -1 on error</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpGet'>httpGet()</a></h3>
<h4>Description</h4>
<p>Send a GET request to the server.
<h4>Syntax</h4>
<p><tt>
int<br>
httpGet(
    <a href='#http_t'>http_t</a> * http,
    const char * uri);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
<tr><td><tt>uri</tt></td><td>URI to get</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Status of call (0 = success)</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.3&nbsp;</span><a name='httpGetAuthString'>httpGetAuthString()</a></h3>
<h4>Description</h4>
<p>Get the current authorization string.
<p>The authorization string is set by cupsDoAuthentication() and
httpSetAuthString().  Use httpGetAuthString() to retrieve the
string to use with httpSetField() for the HTTP_FIELD_AUTHORIZATION
value.


<h4>Syntax</h4>
<p><tt>
char *<br>
httpGetAuthString(
    <a href='#http_t'>http_t</a> * http);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Authorization string</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpGetBlocking'>httpGetBlocking()</a></h3>
<h4>Description</h4>
<p>Get the blocking/non-block state of a connection.


<h4>Syntax</h4>
<p><tt>
int<br>
httpGetBlocking(
    <a href='#http_t'>http_t</a> * http);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>1 if blocking, 0 if non-blocking</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span><a name='httpGetCookie'>httpGetCookie()</a></h3>
<h4>Description</h4>
<p>Get any cookie data from the response.


<h4>Syntax</h4>
<p><tt>
const char *<br>
httpGetCookie(
    <a href='#http_t'>http_t</a> * http);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connecion</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Cookie data or NULL</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;DEPRECATED&nbsp;</span><a name='httpGetDateString'>httpGetDateString()</a></h3>
<h4>Description</h4>
<p>Get a formatted date/time string from a time value.


<h4>Syntax</h4>
<p><tt>
const char *<br>
httpGetDateString(
    time_t t);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>t</tt></td><td>UNIX time</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Date/time string</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpGetDateString2'>httpGetDateString2()</a></h3>
<h4>Description</h4>
<p>Get a formatted date/time string from a time value.


<h4>Syntax</h4>
<p><tt>
const char *<br>
httpGetDateString2(
    time_t t,
    char * s,
    int slen);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>t</tt></td><td>UNIX time</td></tr>
<tr><td><tt>s</tt></td><td>String buffer</td></tr>
<tr><td><tt>slen</tt></td><td>Size of string buffer</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Date/time string</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpGetDateTime'>httpGetDateTime()</a></h3>
<h4>Description</h4>
<p>Get a time value from a formatted date/time string.
<h4>Syntax</h4>
<p><tt>
time_t<br>
httpGetDateTime(
    const char * s);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>s</tt></td><td>Date/time string</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>UNIX time</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpGetFd'>httpGetFd()</a></h3>
<h4>Description</h4>
<p>Get the file descriptor associated with a connection.


<h4>Syntax</h4>
<p><tt>
int<br>
httpGetFd(
    <a href='#http_t'>http_t</a> * http);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>File descriptor or -1 if none</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpGetField'>httpGetField()</a></h3>
<h4>Description</h4>
<p>Get a field value from a request/response.
<h4>Syntax</h4>
<p><tt>
const char *<br>
httpGetField(
    <a href='#http_t'>http_t</a> * http,
    http_field_t field);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
<tr><td><tt>field</tt></td><td>Field to get</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Field value</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;DEPRECATED&nbsp;</span><a name='httpGetHostByName'>httpGetHostByName()</a></h3>
<h4>Description</h4>
<p>Lookup a hostname or IPv4 address, and return
address records for the specified name.


<h4>Syntax</h4>
<p><tt>
struct hostent *<br>
httpGetHostByName(
    const char * name);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>name</tt></td><td>Hostname or IP address</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Host entry</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpGetHostname'>httpGetHostname()</a></h3>
<h4>Description</h4>
<p>Get the FQDN for the connection or local system.
<p>When &quot;http&quot; points to a connected socket, return the hostname or
address that was used in the call to httpConnect() or httpConnectEncrypt().
Otherwise, return the FQDN for the local system using both gethostname()
and gethostbyname() to get the local hostname with domain.


<h4>Syntax</h4>
<p><tt>
const char *<br>
httpGetHostname(
    <a href='#http_t'>http_t</a> * http,
    char * s,
    int slen);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection or NULL</td></tr>
<tr><td><tt>s</tt></td><td>String buffer for name</td></tr>
<tr><td><tt>slen</tt></td><td>Size of buffer</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>FQDN for connection or system</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;DEPRECATED&nbsp;</span><a name='httpGetLength'>httpGetLength()</a></h3>
<h4>Description</h4>
<p>Get the amount of data remaining from the
content-length or transfer-encoding fields.
<p>This function is deprecated and will not return lengths larger than
2^31 - 1; use httpGetLength2() instead.


<h4>Syntax</h4>
<p><tt>
int<br>
httpGetLength(
    <a href='#http_t'>http_t</a> * http);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Content length</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpGetLength2'>httpGetLength2()</a></h3>
<h4>Description</h4>
<p>Get the amount of data remaining from the
content-length or transfer-encoding fields.
<p>This function returns the complete content length, even for
content larger than 2^31 - 1.


<h4>Syntax</h4>
<p><tt>
off_t<br>
httpGetLength2(
    <a href='#http_t'>http_t</a> * http);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Content length</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpGetStatus'>httpGetStatus()</a></h3>
<h4>Description</h4>
<p>Get the status of the last HTTP request.


<h4>Syntax</h4>
<p><tt>
http_status_t<br>
httpGetStatus(
    <a href='#http_t'>http_t</a> * http);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>HTTP status</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;DEPRECATED&nbsp;</span><a name='httpGetSubField'>httpGetSubField()</a></h3>
<h4>Description</h4>
<p>Get a sub-field value.


<h4>Syntax</h4>
<p><tt>
char *<br>
httpGetSubField(
    <a href='#http_t'>http_t</a> * http,
    http_field_t field,
    const char * name,
    char * value);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
<tr><td><tt>field</tt></td><td>Field index</td></tr>
<tr><td><tt>name</tt></td><td>Name of sub-field</td></tr>
<tr><td><tt>value</tt></td><td>Value string</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Value or NULL</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpGetSubField2'>httpGetSubField2()</a></h3>
<h4>Description</h4>
<p>Get a sub-field value.


<h4>Syntax</h4>
<p><tt>
char *<br>
httpGetSubField2(
    <a href='#http_t'>http_t</a> * http,
    http_field_t field,
    const char * name,
    char * value,
    int valuelen);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
<tr><td><tt>field</tt></td><td>Field index</td></tr>
<tr><td><tt>name</tt></td><td>Name of sub-field</td></tr>
<tr><td><tt>value</tt></td><td>Value string</td></tr>
<tr><td><tt>valuelen</tt></td><td>Size of value buffer</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Value or NULL</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpGets'>httpGets()</a></h3>
<h4>Description</h4>
<p>Get a line of text from a HTTP connection.
<h4>Syntax</h4>
<p><tt>
char *<br>
httpGets(
    char * line,
    int length,
    <a href='#http_t'>http_t</a> * http);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>line</tt></td><td>Line to read into</td></tr>
<tr><td><tt>length</tt></td><td>Max length of buffer</td></tr>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Line or NULL</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpHead'>httpHead()</a></h3>
<h4>Description</h4>
<p>Send a HEAD request to the server.
<h4>Syntax</h4>
<p><tt>
int<br>
httpHead(
    <a href='#http_t'>http_t</a> * http,
    const char * uri);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
<tr><td><tt>uri</tt></td><td>URI for head</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Status of call (0 = success)</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpInitialize'>httpInitialize()</a></h3>
<h4>Description</h4>
<p>Initialize the HTTP interface library and set the
default HTTP proxy (if any).
<h4>Syntax</h4>
<p><tt>
void<br>
httpInitialize(void);
</tt></p>
<h4>Arguments</h4>
<p>None.</p>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpMD5'>httpMD5()</a></h3>
<h4>Description</h4>
<p>Compute the MD5 sum of the username:group:password.
<h4>Syntax</h4>
<p><tt>
char *<br>
httpMD5(
    const char * username,
    const char * realm,
    const char * passwd,
    char md5[33]);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>username</tt></td><td>User name</td></tr>
<tr><td><tt>realm</tt></td><td>Realm name</td></tr>
<tr><td><tt>passwd</tt></td><td>Password string</td></tr>
<tr><td><tt>md5[33]</tt></td><td>MD5 string</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>MD5 sum</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpMD5Final'>httpMD5Final()</a></h3>
<h4>Description</h4>
<p>Combine the MD5 sum of the username, group, and password
with the server-supplied nonce value, method, and
request-uri.
<h4>Syntax</h4>
<p><tt>
char *<br>
httpMD5Final(
    const char * nonce,
    const char * method,
    const char * resource,
    char md5[33]);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>nonce</tt></td><td>Server nonce value</td></tr>
<tr><td><tt>method</tt></td><td>METHOD (GET, POST, etc.)</td></tr>
<tr><td><tt>resource</tt></td><td>Resource path</td></tr>
<tr><td><tt>md5[33]</tt></td><td>MD5 sum</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>New sum</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpMD5String'>httpMD5String()</a></h3>
<h4>Description</h4>
<p>Convert an MD5 sum to a character string.
<h4>Syntax</h4>
<p><tt>
char *<br>
httpMD5String(
    const unsigned char * sum,
    char md5[33]);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>sum</tt></td><td>MD5 sum data</td></tr>
<tr><td><tt>md5[33]</tt></td><td>MD5 sum in hex</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>MD5 sum in hex</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpOptions'>httpOptions()</a></h3>
<h4>Description</h4>
<p>Send an OPTIONS request to the server.
<h4>Syntax</h4>
<p><tt>
int<br>
httpOptions(
    <a href='#http_t'>http_t</a> * http,
    const char * uri);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
<tr><td><tt>uri</tt></td><td>URI for options</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Status of call (0 = success)</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpPost'>httpPost()</a></h3>
<h4>Description</h4>
<p>Send a POST request to the server.
<h4>Syntax</h4>
<p><tt>
int<br>
httpPost(
    <a href='#http_t'>http_t</a> * http,
    const char * uri);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
<tr><td><tt>uri</tt></td><td>URI for post</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Status of call (0 = success)</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpPut'>httpPut()</a></h3>
<h4>Description</h4>
<p>Send a PUT request to the server.
<h4>Syntax</h4>
<p><tt>
int<br>
httpPut(
    <a href='#http_t'>http_t</a> * http,
    const char * uri);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
<tr><td><tt>uri</tt></td><td>URI to put</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Status of call (0 = success)</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;DEPRECATED&nbsp;</span><a name='httpRead'>httpRead()</a></h3>
<h4>Description</h4>
<p>Read data from a HTTP connection.
<p>This function is deprecated. Use the httpRead2() function which can
read more than 2GB of data.


<h4>Syntax</h4>
<p><tt>
int<br>
httpRead(
    <a href='#http_t'>http_t</a> * http,
    char * buffer,
    int length);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
<tr><td><tt>buffer</tt></td><td>Buffer for data</td></tr>
<tr><td><tt>length</tt></td><td>Maximum number of bytes</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Number of bytes read</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpRead2'>httpRead2()</a></h3>
<h4>Description</h4>
<p>Read data from a HTTP connection.


<h4>Syntax</h4>
<p><tt>
<a href='#ssize_t'>ssize_t</a><br>
httpRead2(
    <a href='#http_t'>http_t</a> * http,
    char * buffer,
    size_t length);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
<tr><td><tt>buffer</tt></td><td>Buffer for data</td></tr>
<tr><td><tt>length</tt></td><td>Maximum number of bytes</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Number of bytes read</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpReconnect'>httpReconnect()</a></h3>
<h4>Description</h4>
<p>Reconnect to a HTTP server.
<h4>Syntax</h4>
<p><tt>
int<br>
httpReconnect(
    <a href='#http_t'>http_t</a> * http);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>0 on success, non-zero on failure</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;DEPRECATED&nbsp;</span><a name='httpSeparate'>httpSeparate()</a></h3>
<h4>Description</h4>
<p>Separate a Universal Resource Identifier into its
components.
<p>This function is deprecated; use the httpSeparateURI() function instead.


<h4>Syntax</h4>
<p><tt>
void<br>
httpSeparate(
    const char * uri,
    char * scheme,
    char * username,
    char * host,
    int * port,
    char * resource);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>uri</tt></td><td>Universal Resource Identifier</td></tr>
<tr><td><tt>scheme</tt></td><td>Scheme [32] (http, https, etc.)</td></tr>
<tr><td><tt>username</tt></td><td>Username [1024]</td></tr>
<tr><td><tt>host</tt></td><td>Hostname [1024]</td></tr>
<tr><td><tt>port</tt></td><td>Port number to use</td></tr>
<tr><td><tt>resource</tt></td><td>Resource/filename [1024]</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.21&nbsp;</span><a name='httpSeparate2'>httpSeparate2()</a></h3>
<h4>Description</h4>
<p>Separate a Universal Resource Identifier into its
components.
<p>This function is deprecated; use the httpSeparateURI() function instead.



<h4>Syntax</h4>
<p><tt>
void<br>
httpSeparate2(
    const char * uri,
    char * scheme,
    int schemelen,
    char * username,
    int usernamelen,
    char * host,
    int hostlen,
    int * port,
    char * resource,
    int resourcelen);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>uri</tt></td><td>Universal Resource Identifier</td></tr>
<tr><td><tt>scheme</tt></td><td>Scheme (http, https, etc.)</td></tr>
<tr><td><tt>schemelen</tt></td><td>Size of scheme buffer</td></tr>
<tr><td><tt>username</tt></td><td>Username</td></tr>
<tr><td><tt>usernamelen</tt></td><td>Size of username buffer</td></tr>
<tr><td><tt>host</tt></td><td>Hostname</td></tr>
<tr><td><tt>hostlen</tt></td><td>Size of hostname buffer</td></tr>
<tr><td><tt>port</tt></td><td>Port number to use</td></tr>
<tr><td><tt>resource</tt></td><td>Resource/filename</td></tr>
<tr><td><tt>resourcelen</tt></td><td>Size of resource buffer</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpSeparateURI'>httpSeparateURI()</a></h3>
<h4>Description</h4>
<p>Separate a Universal Resource Identifier into its
components.


<h4>Syntax</h4>
<p><tt>
http_uri_status_t<br>
httpSeparateURI(
    http_uri_coding_t decoding,
    const char * uri,
    char * scheme,
    int schemelen,
    char * username,
    int usernamelen,
    char * host,
    int hostlen,
    int * port,
    char * resource,
    int resourcelen);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>decoding</tt></td><td>Decoding flags</td></tr>
<tr><td><tt>uri</tt></td><td>Universal Resource Identifier</td></tr>
<tr><td><tt>scheme</tt></td><td>Scheme (http, https, etc.)</td></tr>
<tr><td><tt>schemelen</tt></td><td>Size of scheme buffer</td></tr>
<tr><td><tt>username</tt></td><td>Username</td></tr>
<tr><td><tt>usernamelen</tt></td><td>Size of username buffer</td></tr>
<tr><td><tt>host</tt></td><td>Hostname</td></tr>
<tr><td><tt>hostlen</tt></td><td>Size of hostname buffer</td></tr>
<tr><td><tt>port</tt></td><td>Port number to use</td></tr>
<tr><td><tt>resource</tt></td><td>Resource/filename</td></tr>
<tr><td><tt>resourcelen</tt></td><td>Size of resource buffer</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Result of separation</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.3&nbsp;</span><a name='httpSetAuthString'>httpSetAuthString()</a></h3>
<h4>Description</h4>
<p>Set the current authorization string.
<p>This function just stores a copy of the current authorization string in
the HTTP connection object.  You must still call httpSetField() to set
HTTP_FIELD_AUTHORIZATION prior to issuing a HTTP request using httpGet(),
httpHead(), httpOptions(), httpPost, or httpPut().


<h4>Syntax</h4>
<p><tt>
void<br>
httpSetAuthString(
    <a href='#http_t'>http_t</a> * http,
    const char * scheme,
    const char * data);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
<tr><td><tt>scheme</tt></td><td>Auth scheme (NULL to clear it)</td></tr>
<tr><td><tt>data</tt></td><td>Auth data (NULL for none)</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span><a name='httpSetCookie'>httpSetCookie()</a></h3>
<h4>Description</h4>
<p>Set the cookie value(s)...


<h4>Syntax</h4>
<p><tt>
void<br>
httpSetCookie(
    <a href='#http_t'>http_t</a> * http,
    const char * cookie);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>Connection</td></tr>
<tr><td><tt>cookie</tt></td><td>Cookie string</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpSetExpect'>httpSetExpect()</a></h3>
<h4>Description</h4>
<p>Set the Expect: header in a request.
<p>Currently only HTTP_CONTINUE is supported for the &quot;expect&quot; argument.


<h4>Syntax</h4>
<p><tt>
void<br>
httpSetExpect(
    <a href='#http_t'>http_t</a> * http,
    http_status_t expect);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
<tr><td><tt>expect</tt></td><td>HTTP status to expect (HTTP_CONTINUE)</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpSetField'>httpSetField()</a></h3>
<h4>Description</h4>
<p>Set the value of an HTTP header.
<h4>Syntax</h4>
<p><tt>
void<br>
httpSetField(
    <a href='#http_t'>http_t</a> * http,
    http_field_t field,
    const char * value);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
<tr><td><tt>field</tt></td><td>Field index</td></tr>
<tr><td><tt>value</tt></td><td>Value</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpSetLength'>httpSetLength()</a></h3>
<h4>Description</h4>
<p>Set the content-length and content-encoding.


<h4>Syntax</h4>
<p><tt>
void<br>
httpSetLength(
    <a href='#http_t'>http_t</a> * http,
    size_t length);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
<tr><td><tt>length</tt></td><td>Length (0 for chunked)</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpStatus'>httpStatus()</a></h3>
<h4>Description</h4>
<p>Return a short string describing a HTTP status code.
<h4>Syntax</h4>
<p><tt>
const char *<br>
httpStatus(
    http_status_t status);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>status</tt></td><td>HTTP status code</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>String or NULL</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpTrace'>httpTrace()</a></h3>
<h4>Description</h4>
<p>Send an TRACE request to the server.
<h4>Syntax</h4>
<p><tt>
int<br>
httpTrace(
    <a href='#http_t'>http_t</a> * http,
    const char * uri);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
<tr><td><tt>uri</tt></td><td>URI for trace</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Status of call (0 = success)</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='httpUpdate'>httpUpdate()</a></h3>
<h4>Description</h4>
<p>Update the current HTTP state for incoming data.
<h4>Syntax</h4>
<p><tt>
http_status_t<br>
httpUpdate(
    <a href='#http_t'>http_t</a> * http);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>HTTP status</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span><a name='httpWait'>httpWait()</a></h3>
<h4>Description</h4>
<p>Wait for data available on a connection.


<h4>Syntax</h4>
<p><tt>
int<br>
httpWait(
    <a href='#http_t'>http_t</a> * http,
    int msec);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
<tr><td><tt>msec</tt></td><td>Milliseconds to wait</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>1 if data is available, 0 otherwise</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;DEPRECATED&nbsp;</span><a name='httpWrite'>httpWrite()</a></h3>
<h4>Description</h4>
<p>Write data to a HTTP connection.
<p>This function is deprecated. Use the httpWrite2() function which can
write more than 2GB of data.


<h4>Syntax</h4>
<p><tt>
int<br>
httpWrite(
    <a href='#http_t'>http_t</a> * http,
    const char * buffer,
    int length);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
<tr><td><tt>buffer</tt></td><td>Buffer for data</td></tr>
<tr><td><tt>length</tt></td><td>Number of bytes to write</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Number of bytes written</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='httpWrite2'>httpWrite2()</a></h3>
<h4>Description</h4>
<p>Write data to a HTTP connection.


<h4>Syntax</h4>
<p><tt>
<a href='#ssize_t'>ssize_t</a><br>
httpWrite2(
    <a href='#http_t'>http_t</a> * http,
    const char * buffer,
    size_t length);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
<tr><td><tt>buffer</tt></td><td>Buffer for data</td></tr>
<tr><td><tt>length</tt></td><td>Number of bytes to write</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Number of bytes written</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippAddBoolean'>ippAddBoolean()</a></h3>
<h4>Description</h4>
<p>Add a boolean attribute to an IPP message.
<h4>Syntax</h4>
<p><tt>
<a href='#ipp_attribute_t'>ipp_attribute_t</a> *<br>
ippAddBoolean(
    <a href='#ipp_t'>ipp_t</a> * ipp,
    ipp_tag_t group,
    const char * name,
    char value);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
<tr><td><tt>group</tt></td><td>IPP group</td></tr>
<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
<tr><td><tt>value</tt></td><td>Value of attribute</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>New attribute</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippAddBooleans'>ippAddBooleans()</a></h3>
<h4>Description</h4>
<p>Add an array of boolean values.
<h4>Syntax</h4>
<p><tt>
<a href='#ipp_attribute_t'>ipp_attribute_t</a> *<br>
ippAddBooleans(
    <a href='#ipp_t'>ipp_t</a> * ipp,
    ipp_tag_t group,
    const char * name,
    int num_values,
    const char * values);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
<tr><td><tt>group</tt></td><td>IPP group</td></tr>
<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
<tr><td><tt>num_values</tt></td><td>Number of values</td></tr>
<tr><td><tt>values</tt></td><td>Values</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>New attribute</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span><a name='ippAddCollection'>ippAddCollection()</a></h3>
<h4>Description</h4>
<p>Add a collection value.


<h4>Syntax</h4>
<p><tt>
<a href='#ipp_attribute_t'>ipp_attribute_t</a> *<br>
ippAddCollection(
    <a href='#ipp_t'>ipp_t</a> * ipp,
    ipp_tag_t group,
    const char * name,
    <a href='#ipp_t'>ipp_t</a> * value);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
<tr><td><tt>group</tt></td><td>IPP group</td></tr>
<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
<tr><td><tt>value</tt></td><td>Value</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>New attribute</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span><a name='ippAddCollections'>ippAddCollections()</a></h3>
<h4>Description</h4>
<p>Add an array of collection values.


<h4>Syntax</h4>
<p><tt>
<a href='#ipp_attribute_t'>ipp_attribute_t</a> *<br>
ippAddCollections(
    <a href='#ipp_t'>ipp_t</a> * ipp,
    ipp_tag_t group,
    const char * name,
    int num_values,
    const <a href='#ipp_t'>ipp_t</a> ** values);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
<tr><td><tt>group</tt></td><td>IPP group</td></tr>
<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
<tr><td><tt>num_values</tt></td><td>Number of values</td></tr>
<tr><td><tt>values</tt></td><td>Values</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>New attribute</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippAddDate'>ippAddDate()</a></h3>
<h4>Description</h4>
<p>Add a date attribute to an IPP message.
<h4>Syntax</h4>
<p><tt>
<a href='#ipp_attribute_t'>ipp_attribute_t</a> *<br>
ippAddDate(
    <a href='#ipp_t'>ipp_t</a> * ipp,
    ipp_tag_t group,
    const char * name,
    const <a href='#ipp_uchar_t'>ipp_uchar_t</a> * value);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
<tr><td><tt>group</tt></td><td>IPP group</td></tr>
<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
<tr><td><tt>value</tt></td><td>Value</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>New attribute</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippAddInteger'>ippAddInteger()</a></h3>
<h4>Description</h4>
<p>Add a integer attribute to an IPP message.
<h4>Syntax</h4>
<p><tt>
<a href='#ipp_attribute_t'>ipp_attribute_t</a> *<br>
ippAddInteger(
    <a href='#ipp_t'>ipp_t</a> * ipp,
    ipp_tag_t group,
    ipp_tag_t type,
    const char * name,
    int value);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
<tr><td><tt>group</tt></td><td>IPP group</td></tr>
<tr><td><tt>type</tt></td><td>Type of attribute</td></tr>
<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
<tr><td><tt>value</tt></td><td>Value of attribute</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>New attribute</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippAddIntegers'>ippAddIntegers()</a></h3>
<h4>Description</h4>
<p>Add an array of integer values.
<h4>Syntax</h4>
<p><tt>
<a href='#ipp_attribute_t'>ipp_attribute_t</a> *<br>
ippAddIntegers(
    <a href='#ipp_t'>ipp_t</a> * ipp,
    ipp_tag_t group,
    ipp_tag_t type,
    const char * name,
    int num_values,
    const int * values);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
<tr><td><tt>group</tt></td><td>IPP group</td></tr>
<tr><td><tt>type</tt></td><td>Type of attribute</td></tr>
<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
<tr><td><tt>num_values</tt></td><td>Number of values</td></tr>
<tr><td><tt>values</tt></td><td>Values</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>New attribute</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ippAddOctetString'>ippAddOctetString()</a></h3>
<h4>Description</h4>
<p>Add an octetString value to an IPP message.


<h4>Syntax</h4>
<p><tt>
<a href='#ipp_attribute_t'>ipp_attribute_t</a> *<br>
ippAddOctetString(
    <a href='#ipp_t'>ipp_t</a> * ipp,
    ipp_tag_t group,
    const char * name,
    const void * data,
    int datalen);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
<tr><td><tt>group</tt></td><td>IPP group</td></tr>
<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
<tr><td><tt>data</tt></td><td>octetString data</td></tr>
<tr><td><tt>datalen</tt></td><td>Length of data in bytes</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>New attribute</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippAddRange'>ippAddRange()</a></h3>
<h4>Description</h4>
<p>Add a range of values to an IPP message.
<h4>Syntax</h4>
<p><tt>
<a href='#ipp_attribute_t'>ipp_attribute_t</a> *<br>
ippAddRange(
    <a href='#ipp_t'>ipp_t</a> * ipp,
    ipp_tag_t group,
    const char * name,
    int lower,
    int upper);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
<tr><td><tt>group</tt></td><td>IPP group</td></tr>
<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
<tr><td><tt>lower</tt></td><td>Lower value</td></tr>
<tr><td><tt>upper</tt></td><td>Upper value</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>New attribute</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippAddRanges'>ippAddRanges()</a></h3>
<h4>Description</h4>
<p>Add ranges of values to an IPP message.
<h4>Syntax</h4>
<p><tt>
<a href='#ipp_attribute_t'>ipp_attribute_t</a> *<br>
ippAddRanges(
    <a href='#ipp_t'>ipp_t</a> * ipp,
    ipp_tag_t group,
    const char * name,
    int num_values,
    const int * lower,
    const int * upper);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
<tr><td><tt>group</tt></td><td>IPP group</td></tr>
<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
<tr><td><tt>num_values</tt></td><td>Number of values</td></tr>
<tr><td><tt>lower</tt></td><td>Lower values</td></tr>
<tr><td><tt>upper</tt></td><td>Upper values</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>New attribute</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippAddResolution'>ippAddResolution()</a></h3>
<h4>Description</h4>
<p>Add a resolution value to an IPP message.
<h4>Syntax</h4>
<p><tt>
<a href='#ipp_attribute_t'>ipp_attribute_t</a> *<br>
ippAddResolution(
    <a href='#ipp_t'>ipp_t</a> * ipp,
    ipp_tag_t group,
    const char * name,
    ipp_res_t units,
    int xres,
    int yres);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
<tr><td><tt>group</tt></td><td>IPP group</td></tr>
<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
<tr><td><tt>units</tt></td><td>Units for resolution</td></tr>
<tr><td><tt>xres</tt></td><td>X resolution</td></tr>
<tr><td><tt>yres</tt></td><td>Y resolution</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>New attribute</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippAddResolutions'>ippAddResolutions()</a></h3>
<h4>Description</h4>
<p>Add resolution values to an IPP message.
<h4>Syntax</h4>
<p><tt>
<a href='#ipp_attribute_t'>ipp_attribute_t</a> *<br>
ippAddResolutions(
    <a href='#ipp_t'>ipp_t</a> * ipp,
    ipp_tag_t group,
    const char * name,
    int num_values,
    ipp_res_t units,
    const int * xres,
    const int * yres);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
<tr><td><tt>group</tt></td><td>IPP group</td></tr>
<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
<tr><td><tt>num_values</tt></td><td>Number of values</td></tr>
<tr><td><tt>units</tt></td><td>Units for resolution</td></tr>
<tr><td><tt>xres</tt></td><td>X resolutions</td></tr>
<tr><td><tt>yres</tt></td><td>Y resolutions</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>New attribute</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippAddSeparator'>ippAddSeparator()</a></h3>
<h4>Description</h4>
<p>Add a group separator to an IPP message.
<h4>Syntax</h4>
<p><tt>
<a href='#ipp_attribute_t'>ipp_attribute_t</a> *<br>
ippAddSeparator(
    <a href='#ipp_t'>ipp_t</a> * ipp);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>New attribute</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippAddString'>ippAddString()</a></h3>
<h4>Description</h4>
<p>Add a language-encoded string to an IPP message.
<h4>Syntax</h4>
<p><tt>
<a href='#ipp_attribute_t'>ipp_attribute_t</a> *<br>
ippAddString(
    <a href='#ipp_t'>ipp_t</a> * ipp,
    ipp_tag_t group,
    ipp_tag_t type,
    const char * name,
    const char * charset,
    const char * value);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
<tr><td><tt>group</tt></td><td>IPP group</td></tr>
<tr><td><tt>type</tt></td><td>Type of attribute</td></tr>
<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
<tr><td><tt>charset</tt></td><td>Character set</td></tr>
<tr><td><tt>value</tt></td><td>Value</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>New attribute</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippAddStrings'>ippAddStrings()</a></h3>
<h4>Description</h4>
<p>Add language-encoded strings to an IPP message.
<h4>Syntax</h4>
<p><tt>
<a href='#ipp_attribute_t'>ipp_attribute_t</a> *<br>
ippAddStrings(
    <a href='#ipp_t'>ipp_t</a> * ipp,
    ipp_tag_t group,
    ipp_tag_t type,
    const char * name,
    int num_values,
    const char * charset,
    const char *const * values);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
<tr><td><tt>group</tt></td><td>IPP group</td></tr>
<tr><td><tt>type</tt></td><td>Type of attribute</td></tr>
<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
<tr><td><tt>num_values</tt></td><td>Number of values</td></tr>
<tr><td><tt>charset</tt></td><td>Character set</td></tr>
<tr><td><tt>values</tt></td><td>Values</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>New attribute</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippDateToTime'>ippDateToTime()</a></h3>
<h4>Description</h4>
<p>Convert from RFC 1903 Date/Time format to UNIX time
in seconds.
<h4>Syntax</h4>
<p><tt>
time_t<br>
ippDateToTime(
    const <a href='#ipp_uchar_t'>ipp_uchar_t</a> * date);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>date</tt></td><td>RFC 1903 date info</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>UNIX time value</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippDelete'>ippDelete()</a></h3>
<h4>Description</h4>
<p>Delete an IPP message.
<h4>Syntax</h4>
<p><tt>
void<br>
ippDelete(
    <a href='#ipp_t'>ipp_t</a> * ipp);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span><a name='ippDeleteAttribute'>ippDeleteAttribute()</a></h3>
<h4>Description</h4>
<p>Delete a single attribute in an IPP message.


<h4>Syntax</h4>
<p><tt>
void<br>
ippDeleteAttribute(
    <a href='#ipp_t'>ipp_t</a> * ipp,
    <a href='#ipp_attribute_t'>ipp_attribute_t</a> * attr);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
<tr><td><tt>attr</tt></td><td>Attribute to delete</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippErrorString'>ippErrorString()</a></h3>
<h4>Description</h4>
<p>Return a name for the given status code.
<h4>Syntax</h4>
<p><tt>
const char *<br>
ippErrorString(
    ipp_status_t error);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>error</tt></td><td>Error status</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Text string</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ippErrorValue'>ippErrorValue()</a></h3>
<h4>Description</h4>
<p>Return a status code for the given name.


<h4>Syntax</h4>
<p><tt>
ipp_status_t<br>
ippErrorValue(
    const char * name);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>name</tt></td><td>Name</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>IPP status code</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippFindAttribute'>ippFindAttribute()</a></h3>
<h4>Description</h4>
<p>Find a named attribute in a request...
<h4>Syntax</h4>
<p><tt>
<a href='#ipp_attribute_t'>ipp_attribute_t</a> *<br>
ippFindAttribute(
    <a href='#ipp_t'>ipp_t</a> * ipp,
    const char * name,
    ipp_tag_t type);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
<tr><td><tt>type</tt></td><td>Type of attribute</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Matching attribute</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippFindNextAttribute'>ippFindNextAttribute()</a></h3>
<h4>Description</h4>
<p>Find the next named attribute in a request...
<h4>Syntax</h4>
<p><tt>
<a href='#ipp_attribute_t'>ipp_attribute_t</a> *<br>
ippFindNextAttribute(
    <a href='#ipp_t'>ipp_t</a> * ipp,
    const char * name,
    ipp_tag_t type);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
<tr><td><tt>name</tt></td><td>Name of attribute</td></tr>
<tr><td><tt>type</tt></td><td>Type of attribute</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Matching attribute</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippLength'>ippLength()</a></h3>
<h4>Description</h4>
<p>Compute the length of an IPP message.
<h4>Syntax</h4>
<p><tt>
size_t<br>
ippLength(
    <a href='#ipp_t'>ipp_t</a> * ipp);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>ipp</tt></td><td>IPP message</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Size of IPP message</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippNew'>ippNew()</a></h3>
<h4>Description</h4>
<p>Allocate a new IPP message.
<h4>Syntax</h4>
<p><tt>
<a href='#ipp_t'>ipp_t</a> *<br>
ippNew(void);
</tt></p>
<h4>Arguments</h4>
<p>None.</p>
<h4>Returns</h4>
<p>New IPP message</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ippNewRequest'>ippNewRequest()</a></h3>
<h4>Description</h4>
<p>Allocate a new IPP request message.
<p>The new request message is initialized with the attributes-charset and
attributes-natural-language attributes added. The
attributes-natural-language value is derived from the current locale.


<h4>Syntax</h4>
<p><tt>
<a href='#ipp_t'>ipp_t</a> *<br>
ippNewRequest(
    ipp_op_t op);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>op</tt></td><td>Operation code</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>IPP request message</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ippOpString'>ippOpString()</a></h3>
<h4>Description</h4>
<p>Return a name for the given operation id.


<h4>Syntax</h4>
<p><tt>
const char *<br>
ippOpString(
    ipp_op_t op);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>op</tt></td><td>Operation ID</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Name</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ippOpValue'>ippOpValue()</a></h3>
<h4>Description</h4>
<p>Return an operation id for the given name.


<h4>Syntax</h4>
<p><tt>
ipp_op_t<br>
ippOpValue(
    const char * name);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>name</tt></td><td>Textual name</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Operation ID</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippPort'>ippPort()</a></h3>
<h4>Description</h4>
<p>Return the default IPP port number.
<h4>Syntax</h4>
<p><tt>
int<br>
ippPort(void);
</tt></p>
<h4>Arguments</h4>
<p>None.</p>
<h4>Returns</h4>
<p>Port number</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippRead'>ippRead()</a></h3>
<h4>Description</h4>
<p>Read data for an IPP message from a HTTP connection.
<h4>Syntax</h4>
<p><tt>
ipp_state_t<br>
ippRead(
    <a href='#http_t'>http_t</a> * http,
    <a href='#ipp_t'>ipp_t</a> * ipp);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
<tr><td><tt>ipp</tt></td><td>IPP data</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Current state</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span><a name='ippReadFile'>ippReadFile()</a></h3>
<h4>Description</h4>
<p>Read data for an IPP message from a file.


<h4>Syntax</h4>
<p><tt>
ipp_state_t<br>
ippReadFile(
    int fd,
    <a href='#ipp_t'>ipp_t</a> * ipp);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>fd</tt></td><td>HTTP data</td></tr>
<tr><td><tt>ipp</tt></td><td>IPP data</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Current state</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ippReadIO'>ippReadIO()</a></h3>
<h4>Description</h4>
<p>Read data for an IPP message.


<h4>Syntax</h4>
<p><tt>
ipp_state_t<br>
ippReadIO(
    void * src,
    <a href='#ipp_iocb_t'>ipp_iocb_t</a> cb,
    int blocking,
    <a href='#ipp_t'>ipp_t</a> * parent,
    <a href='#ipp_t'>ipp_t</a> * ipp);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>src</tt></td><td>Data source</td></tr>
<tr><td><tt>cb</tt></td><td>Read callback function</td></tr>
<tr><td><tt>blocking</tt></td><td>Use blocking IO?</td></tr>
<tr><td><tt>parent</tt></td><td>Parent request, if any</td></tr>
<tr><td><tt>ipp</tt></td><td>IPP data</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Current state</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippSetPort'>ippSetPort()</a></h3>
<h4>Description</h4>
<p>Set the default port number.
<h4>Syntax</h4>
<p><tt>
void<br>
ippSetPort(
    int p);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>p</tt></td><td>Port number to use</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Nothing.</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippTimeToDate'>ippTimeToDate()</a></h3>
<h4>Description</h4>
<p>Convert from UNIX time to RFC 1903 format.
<h4>Syntax</h4>
<p><tt>
const <a href='#ipp_uchar_t'>ipp_uchar_t</a> *<br>
ippTimeToDate(
    time_t t);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>t</tt></td><td>UNIX time value</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>RFC-1903 date/time data</p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ippWrite'>ippWrite()</a></h3>
<h4>Description</h4>
<p>Write data for an IPP message to a HTTP connection.
<h4>Syntax</h4>
<p><tt>
ipp_state_t<br>
ippWrite(
    <a href='#http_t'>http_t</a> * http,
    <a href='#ipp_t'>ipp_t</a> * ipp);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>http</tt></td><td>HTTP connection</td></tr>
<tr><td><tt>ipp</tt></td><td>IPP data</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Current state</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span><a name='ippWriteFile'>ippWriteFile()</a></h3>
<h4>Description</h4>
<p>Write data for an IPP message to a file.


<h4>Syntax</h4>
<p><tt>
ipp_state_t<br>
ippWriteFile(
    int fd,
    <a href='#ipp_t'>ipp_t</a> * ipp);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>fd</tt></td><td>HTTP data</td></tr>
<tr><td><tt>ipp</tt></td><td>IPP data</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Current state</p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ippWriteIO'>ippWriteIO()</a></h3>
<h4>Description</h4>
<p>Write data for an IPP message.


<h4>Syntax</h4>
<p><tt>
ipp_state_t<br>
ippWriteIO(
    void * dst,
    <a href='#ipp_iocb_t'>ipp_iocb_t</a> cb,
    int blocking,
    <a href='#ipp_t'>ipp_t</a> * parent,
    <a href='#ipp_t'>ipp_t</a> * ipp);
</tt></p>
<h4>Arguments</h4>
<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>dst</tt></td><td>Destination</td></tr>
<tr><td><tt>cb</tt></td><td>Write callback function</td></tr>
<tr><td><tt>blocking</tt></td><td>Use blocking IO?</td></tr>
<tr><td><tt>parent</tt></td><td>Parent IPP message</td></tr>
<tr><td><tt>ipp</tt></td><td>IPP data</td></tr>
</tbody></table></div>
<h4>Returns</h4>
<p>Current state</p>
<!-- NEW PAGE -->
<h2 class='title'><a name='STRUCTURES'>Structures</a></h2>
<ul>
	<li><a href='#http_addrlist_s'><tt>http_addrlist_s</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
	<li><a href='#ipp_attribute_s'><tt>ipp_attribute_s</tt></a> </li>
	<li><a href='#ipp_s'><tt>ipp_s</tt></a> </li>
</ul>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='http_addrlist_s'>http_addrlist_s</a></h3>
<h4>Description</h4>
<p>Socket address list, which is
used to enumerate all of the
addresses that are associated
with a hostname. 
<h4>Definition</h4>
<p><tt>
struct http_addrlist_s<br>
{<br>
&nbsp;&nbsp;<a href='#http_addr_t'>http_addr_t</a> addr;<br>
&nbsp;&nbsp;struct <a href='#http_addrlist_s'>http_addrlist_s</a> * next;<br>
};</tt></p>
<h4>Members</h4>
<div class='table'><table align='center' border='1' width='80%' summary='Members'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>addr</tt> </td><td>Address
</td></tr>
<tr><td><tt>next</tt> </td><td>Pointer to next address in list
</td></tr>
</tbody></table></div>
<!-- NEW PAGE -->
<h3 class='title'><a name='ipp_attribute_s'>ipp_attribute_s</a></h3>
<h4>Description</h4>
<p>Attribute
<h4>Definition</h4>
<p><tt>
struct ipp_attribute_s<br>
{<br>
&nbsp;&nbsp;char * name;<br>
&nbsp;&nbsp;struct <a href='#ipp_attribute_s'>ipp_attribute_s</a> * next;<br>
&nbsp;&nbsp;int num_values;<br>
&nbsp;&nbsp;ipp_tag_t group_tag, value_tag;<br>
&nbsp;&nbsp;<a href='#ipp_value_t'>ipp_value_t</a> values[1];<br>
};</tt></p>
<h4>Members</h4>
<div class='table'><table align='center' border='1' width='80%' summary='Members'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>name</tt> </td><td>Name of attribute
</td></tr>
<tr><td><tt>next</tt> </td><td>Next attribute in list
</td></tr>
<tr><td><tt>num_values</tt> </td><td>Number of values
</td></tr>
<tr><td><tt>value_tag</tt> </td><td>What type of value is it?
</td></tr>
<tr><td><tt>values[1]</tt> </td><td>Values
</td></tr>
</tbody></table></div>
<!-- NEW PAGE -->
<h3 class='title'><a name='ipp_s'>ipp_s</a></h3>
<h4>Description</h4>
<p>IPP Request/Response/Notification
<h4>Definition</h4>
<p><tt>
struct ipp_s<br>
{<br>
&nbsp;&nbsp;<a href='#ipp_attribute_t'>ipp_attribute_t</a> * attrs;<br>
&nbsp;&nbsp;<a href='#ipp_attribute_t'>ipp_attribute_t</a> * current;<br>
&nbsp;&nbsp;ipp_tag_t curtag;<br>
&nbsp;&nbsp;<a href='#ipp_attribute_t'>ipp_attribute_t</a> * last;<br>
&nbsp;&nbsp;<a href='#ipp_attribute_t'>ipp_attribute_t</a> * prev;<br>
&nbsp;&nbsp;<a href='#ipp_request_t'>ipp_request_t</a> request;<br>
&nbsp;&nbsp;ipp_state_t state;<br>
};</tt></p>
<h4>Members</h4>
<div class='table'><table align='center' border='1' width='80%' summary='Members'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>attrs</tt> </td><td>Attributes
</td></tr>
<tr><td><tt>current</tt> </td><td>Current attribute (for read/write)
</td></tr>
<tr><td><tt>curtag</tt> </td><td>Current attribute group tag
</td></tr>
<tr><td><tt>last</tt> </td><td>Last attribute in list
</td></tr>
<tr><td><tt>prev</tt> </td><td>Previous attribute (for read)
</td></tr>
<tr><td><tt>request</tt> </td><td>Request header
</td></tr>
<tr><td><tt>state</tt> </td><td>State of request
</td></tr>
</tbody></table></div>
<!-- NEW PAGE -->
<h2 class='title'><a name='TYPES'>Types</a></h2>
<ul>
	<li><a href='#http_addrlist_t'><tt>http_addrlist_t</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
	<li><a href='#http_auth_t'><tt>http_auth_t</tt></a> </li>
	<li><a href='#http_encoding_t'><tt>http_encoding_t</tt></a> </li>
	<li><a href='#http_encryption_t'><tt>http_encryption_t</tt></a> </li>
	<li><a href='#http_t'><tt>http_t</tt></a> </li>
	<li><a href='#ipp_attribute_t'><tt>ipp_attribute_t</tt></a> </li>
	<li><a href='#ipp_iocb_t'><tt>ipp_iocb_t</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
	<li><a href='#ipp_request_t'><tt>ipp_request_t</tt></a> </li>
	<li><a href='#ipp_t'><tt>ipp_t</tt></a> </li>
	<li><a href='#ipp_uchar_t'><tt>ipp_uchar_t</tt></a> </li>
	<li><a href='#ipp_value_t'><tt>ipp_value_t</tt></a> </li>
</ul>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='http_addrlist_t'>http_addrlist_t</a></h3>
<h4>Description</h4>
<p>Socket address list, which is
used to enumerate all of the
addresses that are associated
with a hostname. 
<h4>Definition</h4>
<p><tt>
typedef struct <a href='#http_addrlist_s'>http_addrlist_s</a> / http_addrlist_t;
</tt></p>
<!-- NEW PAGE -->
<h3 class='title'><a name='http_auth_t'>http_auth_t</a></h3>
<h4>Description</h4>
<p>HTTP authentication types
<h4>Definition</h4>
<p><tt>
typedef enum <a href='#http_auth_e'>http_auth_e</a> http_auth_t;
</tt></p>
<!-- NEW PAGE -->
<h3 class='title'><a name='http_encoding_t'>http_encoding_t</a></h3>
<h4>Description</h4>
<p>HTTP transfer encoding values
<h4>Definition</h4>
<p><tt>
typedef enum <a href='#http_encoding_e'>http_encoding_e</a> http_encoding_t;
</tt></p>
<!-- NEW PAGE -->
<h3 class='title'><a name='http_encryption_t'>http_encryption_t</a></h3>
<h4>Description</h4>
<p>HTTP encryption values
<h4>Definition</h4>
<p><tt>
typedef enum <a href='#http_encryption_e'>http_encryption_e</a> http_encryption_t;
</tt></p>
<!-- NEW PAGE -->
<h3 class='title'><a name='http_t'>http_t</a></h3>
<h4>Description</h4>
<p>HTTP connection type
<h4>Definition</h4>
<p><tt>
typedef struct _http_s http_t;
</tt></p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ipp_attribute_t'>ipp_attribute_t</a></h3>
<h4>Description</h4>
<p>Attribute
<h4>Definition</h4>
<p><tt>
typedef struct <a href='#ipp_attribute_s'>ipp_attribute_s</a> ipp_attribute_t;
</tt></p>
<!-- NEW PAGE -->
<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ipp_iocb_t'>ipp_iocb_t</a></h3>
<h4>Description</h4>
<p>IPP IO Callback Function 
<h4>Definition</h4>
<p><tt>
typedef <a href='#ssize_t'>ssize_t</a> (*ipp_iocb_t)(void *, <a href='#ipp_uchar_t'>ipp_uchar_t</a> *, size_t);
</tt></p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ipp_request_t'>ipp_request_t</a></h3>
<h4>Description</h4>
<p>Request Header
<h4>Definition</h4>
<p><tt>
typedef union <a href='#ipp_request_u'>ipp_request_u</a> ipp_request_t;
</tt></p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ipp_t'>ipp_t</a></h3>
<h4>Description</h4>
<p>Attribute Value
<h4>Definition</h4>
<p><tt>
typedef struct <a href='#ipp_s'>ipp_s</a> ipp_t;
</tt></p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ipp_uchar_t'>ipp_uchar_t</a></h3>
<h4>Description</h4>
<p>IPP status codes...
<h4>Definition</h4>
<p><tt>
typedef typedef unsigned char ipp_uchar_t;
</tt></p>
<!-- NEW PAGE -->
<h3 class='title'><a name='ipp_value_t'>ipp_value_t</a></h3>
<h4>Description</h4>
<p>New in CUPS 1.1.19
<h4>Definition</h4>
<p><tt>
typedef union <a href='#ipp_value_u'>ipp_value_u</a> ipp_value_t;
</tt></p>
<!-- NEW PAGE -->
<h2 class='title'><a name='UNIONS'>Unions</a></h2>
<ul>
	<li><a href='#ipp_request_u'><tt>ipp_request_u</tt></a> </li>
	<li><a href='#ipp_value_u'><tt>ipp_value_u</tt></a> </li>
</ul>
<!-- NEW PAGE -->
<h3 class='title'><a name='ipp_request_u'>ipp_request_u</a></h3>
<h4>Description</h4>
<p>Request Header
<h4>Definition</h4>
<p><tt>
union ipp_request_u<br>
{<br>
};</tt></p>
<h4>Members</h4>
<div class='table'><table align='center' border='1' width='80%' summary='Members'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
</tbody></table></div>
<!-- NEW PAGE -->
<h3 class='title'><a name='ipp_value_u'>ipp_value_u</a></h3>
<h4>Description</h4>
<p>New in CUPS 1.1.19
<h4>Definition</h4>
<p><tt>
union ipp_value_u<br>
{<br>
&nbsp;&nbsp;char boolean;<br>
&nbsp;&nbsp;<a href='#ipp_t'>ipp_t</a> * collection;<br>
&nbsp;&nbsp;<a href='#ipp_uchar_t'>ipp_uchar_t</a> date[11];<br>
&nbsp;&nbsp;int integer;<br>
};</tt></p>
<h4>Members</h4>
<div class='table'><table align='center' border='1' width='80%' summary='Members'>
<thead><tr><th>Name</th><th>Description</th></tr></thead>
<tbody>
<tr><td><tt>boolean</tt> </td><td>Boolean value
</td></tr>
<tr><td><tt>collection</tt> </td><td>Collection value
</td></tr>
<tr><td><tt>date[11]</tt> </td><td>Date/time value
</td></tr>
<tr><td><tt>integer</tt> </td><td>Integer/enumerated value
</td></tr>
</tbody></table></div>
</body>
</html>
